管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器
8 ^% L2 D: S1 B1 u3 B5 h' K4 ]6 m' }* L- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1); 7 _# x/ G# L: l" h/ Q& l* T& |2 b* V
- //创建socket服务- v" [/ X6 O4 l
- $ws = new swoole_websocket_server("0.0.0.0", 9502);5 E3 G9 g2 H8 A: U
- //监听WebSocket连接打开事件
2 O% t8 S z+ ~7 E6 W# p+ t& a1 ?0 p - $ws->on('open', function ($ws, $request) {
8 s+ i* R3 C; b# t% m. q4 r% E( J3 ] - var_dump($request->fd, $request->get, $request->server);9 `- c/ W+ m* d; ^) v) E8 \9 p
- $ws->push($request->fd, "hello, welcome\n");3 B4 `( \1 M$ L5 a3 u: N2 L3 Z
- });
0 G5 T. C+ D- b i6 t
0 U+ d/ I( n0 V; i% P3 l0 o- //监听WebSocket消息事件
: s/ w% D4 E: n o* l6 j - $ws->on('message', function ($ws, $frame) {4 Z( Y9 d. g3 B% } h
- //推送消息给所有用户
1 Z' m' P2 L, D; P& ~4 B$ T/ q/ ` - foreach($ws->connections as $fd){
( g1 b0 @' [6 @/ I - $ws->push($fd, $frame->data);! N/ K2 f& o) H
- }4 j7 L' z8 Y( ^ m$ ]
- });3 V3 w/ F, }% S J
1 @4 }# H p5 `! ?; j1 E( C- //监听WebSocket连接关闭事件( E7 }, D, R. L& T$ N; C6 H- ?
- $ws->on('close', function ($ws, $fd) {
3 O% p7 I3 ?, |5 s - echo "client-{$fd} is closed\n";3 h( R+ N6 w& X$ S
- });
; P0 u1 W. y- {& y - //启动服务1 N3 _3 Z. y, g; D; u2 D) ~9 H
- $ws->start();7 i; T; o3 L: g7 L
* v0 U- V% Y. r$ s9 K9 h# l! Q
复制代码
) L3 r7 `0 V4 j! d7 i; M3 R$ }( hWebsocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
, k \; d& [2 H7 M代码如下 - //连接服务器/ f/ Z& }# f) U2 t- P
- const socket = new WebSocket('ws://lm.com:9502');" J+ [' }8 A6 N' S
- //Connection opened
2 ?" y: [" s! A( B3 \ - socket.addEventListener('open', function (event) {; j1 R4 u/ G/ N3 l* w/ ?' Y
- //发送消息给服务器9 m7 L# \0 g; |: v4 y7 P1 R) Q
- socket.send('Hello Server! im websockt');
9 C: }# y5 O/ `' B# } - });
x, N3 t# i" z& P8 t* } - // Listen for messages
1 c5 E( R0 G' E; a; v - socket.addEventListener('message', function (event) {
4 [% b( Y2 l; h( J* e. ]4 \. @ - //接收服务器返回信息
3 {6 `; D9 l) q5 J/ M0 V - console.log('Message from server ', event.data);3 E/ \+ X$ @6 i/ t* Y4 i
- });
; F: x! G8 c, g% t+ N
& `/ y+ x" o9 j6 J
复制代码 伪直播主播页面" a& ?2 b4 P: U0 s
html - <body>3 k! Q# b" t1 S& V* m$ Q7 i
- <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
" t) l. I; X+ A( y7 Q - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;"> E+ o2 \9 P0 B
- 画布
+ P2 V$ C* W5 l) d, r4 a - </canvas> u' {+ h( P, j* s6 `3 ]
- <img src="" id="videoImage" width="350" height="700">
4 T" ^9 R# x7 U2 e7 a* H) v - <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>
6 G5 S* R& K+ D" I - <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
* D9 h1 k" a s& E: \8 W4 w - </body>4 @7 @3 a. G9 M, Y* @+ y
复制代码javascript - var v = document.getElementById("myVideo");1 z( v X6 R" ?6 E
- var c = document.getElementById("myCanvas");
$ T1 ~0 D( e! F' x- ]& h9 Y$ r - // var c = document.createElement("canvas");
1 T: L: m5 N4 W4 C2 a - var img = document.getElementById("videoImage");8 |$ k) L3 M A3 B6 t4 E% Q; x
- ctx = c.getContext('2d');: S& P. y6 R5 p* b, e9 R4 u
- var dataUrl;
/ F: \; I" e4 N* _/ F - const socket = new WebSocket('ws://xxxx.com:9502');
6 ]7 r0 F5 @& K; x) V" P4 { - //Connection opened
" N0 j: b9 O* b* |0 e+ s7 M - socket.addEventListener('open', function (event) {
/ k9 G& \* d$ H/ h K - // socket.send('Hello Server! im websockt');! B0 h2 ^) I; O. ~ c( T
- });
. U0 |! C$ {! `- L9 a - // Listen for messages
) c2 e7 c0 A Z - socket.addEventListener('message', function (event) {" E8 s) I4 p' r" y
- console.log('Message from server ', event.data);# ^' z- f, M# e& ~+ `- _
- img.src = event.data;- [' F' A# p3 V* e5 o1 e
- });; O8 p% U$ p& S$ L8 d' [
- 8 H/ b& A- D& r2 h& L2 c, ~
- function playVideo() {' u% q0 Q) ^4 P- M$ l
- ctx.drawImage(v, 0, 0, 350, 700);
/ F( ?4 z- J. C3 U - dataUrl = c.toDataURL("image/png");' @2 _. D+ m4 i1 u
- // img.src = dataUrl;( W; `0 o% y6 r [6 F+ ~9 w& _
- socket.send(dataUrl);4 @$ ?. }8 _$ [( W2 h# e
- }( Z7 E/ m6 J+ a' W5 @! _
- var tick;
& ~2 P4 ?$ n4 |. L# G2 \6 M - function aphla() {/ u3 k4 q0 I8 t' U2 J$ R+ V3 V& i' L
- tick = setInterval(function () {" d/ I6 h G, e0 I/ J3 u
- playVideo();
; M- r( f; Y U2 M: K6 V* D - }, 1);
6 d7 [2 J, E/ a$ W/ F - }% `9 j; Q( V7 M6 [# e9 g5 P
- function vdStop() {
% H' l7 F8 }% k. C4 h7 D - clearInterval(tick);* Q+ M2 b4 ^! T
- }( O; d- |) H4 @0 q
复制代码 用户页面- g- B/ j3 E) C5 s
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");
+ d1 @- z0 R' t: _; ] - const socket = new WebSocket("ws://lm.com:9502");
* _. E& C, v: i2 F; E) ` - //
6 k6 O1 l, l! n0 P$ b( \ - socket.addEventListener('open',function(){
- q4 I* g' L: Q- h% n - socket.send('Hello Server! Im live.html');) e5 n$ T2 a* C( [7 H' t- X: u
- });
1 g, N) r; u& r& Y9 e* L9 G - // Listen for messages8 r2 w& ^* X7 N. \* H z" H4 k
- socket.addEventListener('message', function (event) {3 c0 ]0 j0 k% v |9 O& s
- //图片地址) l/ {' m8 f# q; m
- img.src = event.data;
% [# x# i# i5 R( W. u - });
. W- k, s& V- e/ I8 |
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法
; P" b6 K7 c+ e$ e5 g; x0 S& ^% s, P$ V. s, u1 P1 G3 s! K
|
|