管理员
   
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器" _% L1 @4 }4 K+ M' X# v& }
- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
+ [) W0 r/ E, D0 o+ s# U0 D8 Y; t - //创建socket服务
% ]* \# Y7 w- s4 j6 Q- @% }: j - $ws = new swoole_websocket_server("0.0.0.0", 9502);9 `) x/ V( d; e4 l$ G" j$ z
- //监听WebSocket连接打开事件
% m& Z* Z) S6 d7 b0 I4 N - $ws->on('open', function ($ws, $request) {3 Z( p" l) ?, R$ `; v6 D
- var_dump($request->fd, $request->get, $request->server);3 I2 K% o0 ?0 t" Y% D1 d
- $ws->push($request->fd, "hello, welcome\n");
8 a- y: S W- i. K$ v9 G - });
V5 i* h( o9 g' G
( W9 G6 o5 P r5 X7 L% S- //监听WebSocket消息事件
2 s* r$ Y: l; a' |6 S* z - $ws->on('message', function ($ws, $frame) {' d* U7 Z. o7 ^! T# @
- //推送消息给所有用户0 c4 j6 w) u2 v3 l
- foreach($ws->connections as $fd){/ S# s/ z* | T
- $ws->push($fd, $frame->data);( ]! Q2 J( o7 U" D: |
- }
8 ~7 _3 o9 F/ f - });
# B" c- D1 }& I$ J% h - $ W0 I! }1 I4 i: L. i( Q
- //监听WebSocket连接关闭事件5 C* q& j6 s% R1 t' s( e$ B/ ~( }
- $ws->on('close', function ($ws, $fd) {
: B5 M) w2 \/ u' u# S: g - echo "client-{$fd} is closed\n";
! Y% A, D, I, e0 G6 C - });
0 K, r+ n6 I. e9 j - //启动服务; L5 X9 \$ \7 a& m9 T
- $ws->start(); ^. C0 g' z) [0 H# A. U
- $ C% K) o$ n& i+ P" c q
复制代码
0 t1 S, l6 a& K3 a( { wWebsocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端
8 y. ~0 \9 G6 g! }0 s4 `代码如下 - //连接服务器
9 \# v$ {) N+ Q P& X/ `! S" _ - const socket = new WebSocket('ws://lm.com:9502');
9 u4 y- J. Z9 u% n2 e! @ - //Connection opened
+ M5 a9 f9 d* A" o8 S6 Z9 s/ a - socket.addEventListener('open', function (event) {
) U; S: e4 k9 m5 D. h7 ? - //发送消息给服务器0 _( _9 A; A: C0 E$ k: ?
- socket.send('Hello Server! im websockt');) ?7 ~$ h8 Z% Q( S# [$ u" o9 Z
- });
8 B3 `8 j: }' G% B2 Y" V - // Listen for messages- D- H6 v- K% f$ h B B
- socket.addEventListener('message', function (event) {: [" G! z# @. D: {7 y
- //接收服务器返回信息
, p+ L s) k7 z" O" C, p; B, g - console.log('Message from server ', event.data);: T4 i+ @8 o: ?: D- |
- });
9 w6 v; T. F |' k - / c( b/ O$ h9 _( t+ q, N2 Z& `3 \" H
复制代码 伪直播主播页面' E$ B* Z. V$ B/ j9 U
html - <body>
1 G: Y( ?4 |, O4 [9 v5 C# F - <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
8 g$ A S. F# p& S - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">
9 s7 l$ h8 K; ?% Q4 v% B - 画布6 @+ t1 R- J0 d1 _' Y. Y/ C) K
- </canvas>1 x7 w5 ]0 K. ]+ W f
- <img src="" id="videoImage" width="350" height="700">- l0 D2 X0 b. H K: c
- <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>8 i* w0 \: m- T( c0 y% e
- <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>
H5 f' y3 K# G: O8 `: Y& b - </body>0 W, k o8 W; C' |9 [. T) U
复制代码javascript - var v = document.getElementById("myVideo");9 Y2 w. ]! M) t* K
- var c = document.getElementById("myCanvas");
7 J( Y( g P0 {4 b4 R4 K - // var c = document.createElement("canvas");0 O6 l2 k) Z% e9 l
- var img = document.getElementById("videoImage");: S! n( E& y- U$ F9 t; I
- ctx = c.getContext('2d');( E2 U; w) C. P3 ^8 ?+ F
- var dataUrl;
5 ~* A. X. L# ]& B* L - const socket = new WebSocket('ws://xxxx.com:9502');
6 H3 o9 V C' B3 M - //Connection opened
0 }/ C, [$ a. n, W - socket.addEventListener('open', function (event) {
' y! d" Q6 z# G4 @% y2 B - // socket.send('Hello Server! im websockt');
# ^0 [) A2 e( ~: {+ d2 n - });
* l7 W4 V! _" j: U3 \( z( w; ^: B# R - // Listen for messages
$ E' f8 l( Q h* ?9 l9 L# B - socket.addEventListener('message', function (event) {
+ C( ?7 d: F/ J& d - console.log('Message from server ', event.data);
+ _2 u9 F$ y2 P4 G$ ^ - img.src = event.data;& I- D) @+ z$ O$ \" s( }
- });
* F9 Y( X& q% W" ^7 \ - 9 T. z2 u8 {2 `$ H" _1 f1 ~
- function playVideo() {5 l/ ]" Y$ B C- B+ y$ Q! u
- ctx.drawImage(v, 0, 0, 350, 700);& U/ [% }' e9 j( X5 c5 I+ y
- dataUrl = c.toDataURL("image/png");
5 ~4 c. t' _/ c% q" v - // img.src = dataUrl;
8 g f: N5 F& x5 c) z$ `, K - socket.send(dataUrl);
6 _, x2 b+ G' z) N - }, M- M! C, a2 t0 c: Z. {
- var tick;
9 f" U7 y! v6 v - function aphla() {
7 k q) A6 S) d% b% Q - tick = setInterval(function () {; M4 }# T# o6 s% m2 L+ T7 t$ c" S- w
- playVideo(); N' N |; ~ l0 j1 f: k1 ^
- }, 1);; @6 q! i, k; I; X
- }
; A4 S4 z6 |& V- H% E - function vdStop() {; W; d. e, g0 n/ M
- clearInterval(tick);
Z) Y! V& @5 D, \6 h - }
) [* [2 N# Q- P3 m
复制代码 用户页面3 _' I; J& F1 H* @7 ]
html - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");
8 A) i! G/ ~$ a* Z7 Z" ?' K - const socket = new WebSocket("ws://lm.com:9502");
! F6 K6 l1 D8 E. a& f - //! e- V m( i+ \: [$ h* O
- socket.addEventListener('open',function(){' b8 \4 b, }7 x4 y2 J
- socket.send('Hello Server! Im live.html');
6 L0 y2 ]) M1 Y0 |% g; p* q - });& P6 N4 X4 H0 Z5 ]
- // Listen for messages
8 S' k& J b: Z - socket.addEventListener('message', function (event) {
/ M! n) Y5 t& Z9 K1 S8 N - //图片地址
" G1 ~* N! H- H9 S0 g- C, {, A - img.src = event.data;
6 D: g1 c, {* h9 q9 H - });
u8 p! `+ p% Y' |; r
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 9 ~3 G6 g+ V. h3 Z( e
; v B% y4 v1 n8 g
|
|