管理员
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器8 i6 i- M3 Q4 z" K+ G! j9 Q
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
$ d! N8 N5 u% p( o3 s! E& J" c5 d5 M) } - //创建socket服务
+ v- V" F/ u5 V5 I: {: G! [4 ~ - $ws = new swoole_websocket_server("0.0.0.0", 9502);+ z' e6 P8 |( U0 g
- //监听WebSocket连接打开事件1 e$ R& l D6 }& ~! Z
- $ws->on('open', function ($ws, $request) {
+ n1 I4 E1 h( a4 H+ y" k - var_dump($request->fd, $request->get, $request->server);8 d& }+ r+ u3 ]# t* z* ]7 U" f% S
- $ws->push($request->fd, "hello, welcome\n");
* U; v/ O7 t5 ^6 b7 r4 ? - });' N4 {. \! r h+ p! u
* e$ x1 X# |# v1 l$ X- //监听WebSocket消息事件0 n* T) o6 W' W x7 @3 p5 X N( `
- $ws->on('message', function ($ws, $frame) { [ [$ s5 |+ k0 T* C
- //推送消息给所有用户
, \9 L! H6 {/ }/ C' i- {) u - foreach($ws->connections as $fd){/ s) ? T; ]0 ?6 `# N2 j1 y
- $ws->push($fd, $frame->data);: y+ n; b0 }7 A/ v/ F! a$ n5 d. g
- }
- W% Z9 p8 k. H - });6 p2 l; {& `! y1 G% T0 T. k( {( u
0 ?7 U; w& w7 }9 d+ R) c' [% x- //监听WebSocket连接关闭事件, |! f8 K8 @" _2 c# B% a
- $ws->on('close', function ($ws, $fd) { X8 B' D& }! c& b
- echo "client-{$fd} is closed\n";" ]1 ~8 o) E* i! Z) B; ]
- });! K' g) o0 h8 h, f
- //启动服务
" |; E, C6 g! H, | - $ws->start();- u( H( P! K0 _$ S2 S% v
- ! w- l) m. J1 c+ E o
复制代码
$ K6 s" [2 T3 ~9 dWebsocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
0 J# K4 x( Q9 t6 m: {代码如下 - //连接服务器
2 @6 M/ r5 B% D9 L - const socket = new WebSocket('ws://lm.com:9502');
; n0 n2 k0 l' R7 d" H y1 L4 ^ - //Connection opened( E7 H$ X9 T8 _; F/ V" `! I# q0 t0 G; J
- socket.addEventListener('open', function (event) {
" g; S# d( R% `/ U; f& g - //发送消息给服务器 U6 Z% U+ N1 e B: H! n
- socket.send('Hello Server! im websockt'); H- T# E$ s6 Z7 h* U
- });( Y- X) P- g3 }, { G
- // Listen for messages/ E+ Y+ Z1 P% {, t- u
- socket.addEventListener('message', function (event) {' ?& a& @6 P u
- //接收服务器返回信息; r9 I r$ Q( P! d0 d6 Q' X9 r
- console.log('Message from server ', event.data);
% ^- u" g" B+ t0 H" i' e5 p - });
+ e% j( @4 @) x0 I h - $ L# y. f+ [7 z
复制代码 伪直播主播页面
4 ?+ W+ L; ?$ Q9 U* y* B' g1 {html - <body>
( l% l Q% F/ t$ m - <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
5 V8 Z8 P1 {2 ^1 [& H4 j( Z - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
$ q+ S* f2 Q* C7 u( r( ? - 画布
4 W' p+ ?$ u+ {4 | - </canvas>
- h, f; m* J: \ - <img src="" id="videoImage" width="350" height="700">
* F6 ?$ O; `8 H, C0 E - <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>3 o6 u; N* ]9 k2 i) q* N
- <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
3 ^9 _+ C* f. d0 c! j8 m( r, y - </body>
4 c# J0 C' X/ S" z7 X2 G5 [
复制代码javascript - var v = document.getElementById("myVideo");8 b/ f# `; I, _- s
- var c = document.getElementById("myCanvas");( A% N0 X& Q) C# q- u4 }( k& `
- // var c = document.createElement("canvas");
2 J/ [: u7 t1 @% T: _% t - var img = document.getElementById("videoImage");3 V2 z/ [ G: S( P1 \
- ctx = c.getContext('2d');
4 i6 P% f8 t- {7 W; y0 | k3 u& \/ g% Y. n - var dataUrl;
5 O$ K% B/ U( \& ^" ^( K& y' S6 @ - const socket = new WebSocket('ws://xxxx.com:9502');
+ U9 L- `( P! p% v. X( P9 g - //Connection opened
7 B. L0 J0 D/ }& G, Q - socket.addEventListener('open', function (event) {
3 `$ ~ @, d4 I3 [ - // socket.send('Hello Server! im websockt');
% p( j# g& I' |8 Q: n - });8 z- [" _1 {4 l; X2 g# L
- // Listen for messages
/ E: M( K2 R- m+ ~! {, K2 W - socket.addEventListener('message', function (event) {
, C1 k% \" E; v1 q6 M0 ~ - console.log('Message from server ', event.data);
b+ h# u. S& u' z* c - img.src = event.data;
* k4 S$ W0 U8 i7 G8 X2 } - });: C, Z8 |: N& |- K2 I" d
6 S% C. z5 [9 x, F; `* V+ r- function playVideo() {
* U: `2 H, s# H) Q - ctx.drawImage(v, 0, 0, 350, 700);
0 X/ I. B% }! y3 k - dataUrl = c.toDataURL("image/png"); n/ o. a( k6 @0 }' X0 r
- // img.src = dataUrl;$ n+ Z& V$ M4 c& T! T& f
- socket.send(dataUrl);
8 }5 T, I- }$ \7 D; B& S - }
5 y. s( J7 r* a - var tick;- ~5 |7 \* U4 u! c4 I/ \
- function aphla() {, O4 j% v+ c2 u+ U f, `
- tick = setInterval(function () {
. h% g" Y2 K# b1 T4 s: ?2 s - playVideo();% R& v' s5 {* K8 x4 v7 x& E
- }, 1);) q9 {0 Q! f! s
- }
3 K# r- E! R" ] - function vdStop() {# P% m& _# l0 B; m6 N
- clearInterval(tick);! z+ ~ W4 e& ^+ e2 b1 L
- }
* f- `# y) J, e$ b1 ~
复制代码 用户页面
2 |0 |0 n$ P4 k% D zhtml - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");, M( D; _' ?* e5 R
- const socket = new WebSocket("ws://lm.com:9502");
8 O% j/ F. T+ \; |& M. Z - //
0 r) p. R/ O: ^' R0 N1 {' } - socket.addEventListener('open',function(){7 d6 R- K+ q8 }' w
- socket.send('Hello Server! Im live.html');- J+ b/ F/ e" q& G3 T! Q
- });/ j8 W2 a q' S6 v: O
- // Listen for messages
: s2 [; @ i( u& |2 x+ |2 m: ? - socket.addEventListener('message', function (event) {7 H4 e/ A! ?+ C4 J4 j% G( {
- //图片地址
. X* t; P" F& V( G$ l - img.src = event.data;
4 X; X; d( V4 _) \ - });
; N) f. w( t6 a* H
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法
! f' k. U- v% ?, e" W) P" e5 ?. r5 T8 q0 b, r
|
|