管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器
6 s4 ~$ g8 _8 [2 t* Y" E- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
+ h2 E; l' L, x' Y8 r - //创建socket服务4 V, `9 @0 ^. _9 D0 ?' O# E
- $ws = new swoole_websocket_server("0.0.0.0", 9502);
& ^# p9 x' d+ r1 k5 j2 P( | - //监听WebSocket连接打开事件
; B9 d4 E; d: _, q - $ws->on('open', function ($ws, $request) {
4 g, K) T: e6 R, E# { C - var_dump($request->fd, $request->get, $request->server);
5 k: m) n! [. x9 J/ I* d% b - $ws->push($request->fd, "hello, welcome\n");" I: o9 c3 k, s( D# y1 Z m5 P
- });
/ w+ b& y# M2 z+ ]: b k
0 j$ r8 L. l5 g- g- //监听WebSocket消息事件- ^7 R* I( Y% n9 j
- $ws->on('message', function ($ws, $frame) {
2 {1 o z2 a0 p5 ?" m2 H5 i x - //推送消息给所有用户
4 p6 q* F- C4 F# h- e6 H - foreach($ws->connections as $fd){
# b5 }4 M! {9 C, O/ l( ]7 @$ c - $ws->push($fd, $frame->data);5 q0 ?' [ I3 [# w
- }
( z! r# {; _+ y3 x# b8 B, F+ ?; l" K# w - });9 N% r# q7 j0 l ^" ]5 n
- " |& a! y' c. t
- //监听WebSocket连接关闭事件
$ n8 D8 ~5 d- r. I2 I - $ws->on('close', function ($ws, $fd) {( N. w, f' h, }, p( e
- echo "client-{$fd} is closed\n";
& t4 Q( l8 z( e7 P" m5 u g% ] - });
6 t& w; g, M1 S/ v+ p4 [, j e o/ s - //启动服务
' J5 v7 h: K [8 S: n L5 V - $ws->start();
4 A) a; F | A+ P9 L* H# O5 |
- h' h" m9 g8 @$ c( e2 T* n
复制代码
+ o) w8 {$ f ]Websocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端* M8 U& d3 A5 k. n
代码如下 - //连接服务器
& Y# i- b1 n+ U0 H4 d) z' b - const socket = new WebSocket('ws://lm.com:9502');- B- x0 \* I4 x- Z' ] v, y1 _
- //Connection opened
7 C& h7 @1 A! V9 K5 A7 ] - socket.addEventListener('open', function (event) {
* G3 T: C* [. `& f1 P* o - //发送消息给服务器* I- N3 s2 P9 W. b' _5 G, h, S
- socket.send('Hello Server! im websockt');
% Y& B Z0 D# I3 j5 q! t4 Z+ X - });+ Y9 w4 O, g+ X9 F" U- A4 a( R8 n
- // Listen for messages
: M) j" l1 Q; C& U* k - socket.addEventListener('message', function (event) {4 ?: a0 S. S/ l' x$ W) T
- //接收服务器返回信息+ l/ F2 ~8 c6 w6 L
- console.log('Message from server ', event.data);
7 K+ {5 I: v4 A - });+ H6 G+ M5 e p w
- ' B, J8 y E* X
复制代码 伪直播主播页面
" t- @% |8 w" |. s! |$ i6 h( uhtml - <body>0 m6 d8 m P. v' w; e; w
- <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
5 V* l- N0 j3 W, y - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">! d( ?9 f* s+ a6 ~. K4 h
- 画布
2 ?* t) k( w& w8 H2 X8 H) A1 J7 F - </canvas>4 i: `# X5 h& d4 k
- <img src="" id="videoImage" width="350" height="700"># l/ t: V3 m- [0 I5 M7 o7 R0 u
- <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>
) Y5 R$ y5 `! h* e' _: z+ v+ V - <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
1 e) l, j7 [* A# u9 P/ G% V - </body>3 [7 T. L( f* F: l' n( s# `
复制代码javascript - var v = document.getElementById("myVideo");
& N6 ^1 D0 C" h, J$ b W - var c = document.getElementById("myCanvas");4 @' x. @8 M1 i, T( I
- // var c = document.createElement("canvas");" q. U+ E5 @ ~" o' _
- var img = document.getElementById("videoImage");
( G" B) i& Y0 A - ctx = c.getContext('2d');1 V: {) r$ D! \6 G
- var dataUrl;
+ a; \- |; d) F/ a - const socket = new WebSocket('ws://xxxx.com:9502');6 p0 Q k+ Y5 M# ]
- //Connection opened
4 m7 y: t1 W, p5 e+ O% B$ }* G, J - socket.addEventListener('open', function (event) {
1 e, J; d: H y - // socket.send('Hello Server! im websockt');4 n- f) _8 }& E
- });
( N; q, y$ o5 G1 T/ } - // Listen for messages9 }# ^- e* h8 F: `/ p5 X
- socket.addEventListener('message', function (event) {
9 A" V" b" P) D |0 N+ d5 c/ x8 e - console.log('Message from server ', event.data);
* n0 w/ n, W+ Z# ?! U; I - img.src = event.data;( ^ }8 K8 I1 D7 _0 n& K& P
- });+ M4 \2 _; b5 V; n$ g
3 l [: t# m; n3 A- function playVideo() {
O$ J' i4 J8 _! {0 Q1 \ - ctx.drawImage(v, 0, 0, 350, 700);* |% M1 U6 ]8 l( h( |/ v3 L' F P1 P; C: _
- dataUrl = c.toDataURL("image/png");
% X' H! ^' \/ e1 R. W7 x$ Z - // img.src = dataUrl;4 i- ^) O A- T0 V; t
- socket.send(dataUrl);3 O7 b7 i, n5 m$ K' ]1 T, o8 m
- }0 I" w+ ^: H" Z n$ z
- var tick;
) {( j) N3 Q* `5 o - function aphla() {0 `' X$ g# T: u" Y& U
- tick = setInterval(function () {+ E. ^" g; i4 ]3 x2 m# i
- playVideo();
7 r7 p- X) C( H7 X - }, 1);
0 u6 }7 X" S* |# W8 J - }
3 q: D) x3 U- H - function vdStop() {- P. w- `1 w2 w7 _ g- D
- clearInterval(tick);
k q: [, p- P6 e; g% Q% } - }0 V" d( w1 v$ R5 N
复制代码 用户页面2 s& J. w" [0 x- S4 x
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");- A3 I2 K- }1 I+ U; h; c. D
- const socket = new WebSocket("ws://lm.com:9502");
8 C, V1 O1 t! Y1 D - //# _/ k% ]3 g- a, L& [ j
- socket.addEventListener('open',function(){
4 X8 d1 D- p+ U( G- u$ r - socket.send('Hello Server! Im live.html');. V% R2 Y( Y# K; h, K- S7 U
- });
- q! E2 a( f7 ? i4 X - // Listen for messages% |9 l: W F* R4 _
- socket.addEventListener('message', function (event) {# Y& C* K9 E4 _' o" L6 m' t
- //图片地址
2 L: p E$ a7 v - img.src = event.data;
5 o4 f6 x) W: x1 P" G - });
0 ^; ~9 `4 x' a% y& }: h
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 5 I4 E! N: V, _$ [; r0 g" ]
A$ L5 {* s* r8 y0 i9 _) B$ T2 q1 d
|
|