管理员
![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif) ![Rank: 64](template/yeei_dream1/css/yeei//star_level3.gif)
论坛积分
分
威望 点
贡献值 个
金币 枚
|
伪直播功能Websocket服务器
" Y8 v( `$ K9 f2 L6 _- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websockt服务代码如下 - error_reporting(-1);
/ e/ D9 P, k c9 K - //创建socket服务$ s: D, t4 B$ \/ T3 S# O3 L Q
- $ws = new swoole_websocket_server("0.0.0.0", 9502); n8 @$ d. K" X' O
- //监听WebSocket连接打开事件
4 J2 o& ^# c3 ~+ n; z9 [ - $ws->on('open', function ($ws, $request) { D! d7 X$ N# l
- var_dump($request->fd, $request->get, $request->server);
, B# P% Y+ U2 E( f. E" d - $ws->push($request->fd, "hello, welcome\n");
( t+ b2 r! F1 A( K& Z, R# D - });* t+ X1 U5 u( h& v% O
- $ q0 X) N. v7 ^; U. `
- //监听WebSocket消息事件! _0 }% c$ ]! ]' K9 w( }
- $ws->on('message', function ($ws, $frame) { T# u& Y9 Y) _7 ~5 @1 x
- //推送消息给所有用户# E7 ^: p& b5 L5 o8 V# K$ Q T
- foreach($ws->connections as $fd){
) F# W# E0 a+ Y - $ws->push($fd, $frame->data);
, k3 {) v( n8 O- v+ m - }
" ~- |- y0 W* l; N# O+ { - });+ }. h% j, C e X- h
- & l, Y7 Q1 b2 }6 X J2 M0 w |) t* E$ v
- //监听WebSocket连接关闭事件
. t8 `8 U6 M5 u B# Y - $ws->on('close', function ($ws, $fd) {/ R7 z6 o" d" q& L& t
- echo "client-{$fd} is closed\n";
0 Y9 {3 N4 l4 f: W; ~ - });
8 t! w1 |- `( V. t( j) A: K% U - //启动服务
8 X8 {! q$ d0 A - $ws->start();
s+ B) Q( j) n3 g3 D# p1 A. F - 7 l+ y+ p+ `) u! k3 x& i
复制代码 - i1 b/ I9 {' y
Websocket客户端- socket 通信技术就是两台联网的计算机之间交换数据的技术,这就是 socket 的全部内容了吗?是的!socket 编程远比想象中的简单很多,阅读完这套简明的入门教程你就能胜任简单的 socket 编程了。
复制代码 创建websocket客户端' O& n$ B, ^; t$ W# e
代码如下 - //连接服务器5 O" o) ]% F/ @* ?7 \% T
- const socket = new WebSocket('ws://lm.com:9502');+ P& M2 n0 H1 C2 u( I9 h/ b
- //Connection opened
0 q7 ?# ^0 Q0 b' ` - socket.addEventListener('open', function (event) {
, O- ` m1 v+ ?/ o( C - //发送消息给服务器
3 A; p/ J6 } J' m# S j: Z. N, q - socket.send('Hello Server! im websockt');
* ], H4 r% `& q) k# |- A - });
" i- u6 k \; f- \( e1 z" X - // Listen for messages
2 q; y+ |9 a b$ w% r - socket.addEventListener('message', function (event) {
7 _6 Q6 r, @) D7 i - //接收服务器返回信息
; P9 Q: ]% w: L" i* F, X - console.log('Message from server ', event.data);
5 \( T5 _6 \& b- l$ B - });
5 `3 N! n. K d d+ G/ D, k# r - $ D# n y5 k: e% Z! ?2 r& \
复制代码 伪直播主播页面
9 a4 k/ r" q& s5 K4 jhtml - <body>
( L( w; A, [, I$ J) x# i/ L - <video id="myVideo" src="./video/tikto.mp4" style="height:auto;width: 350px;" controls=true muted=true></video>
2 @) ^. r% D; x1 Y, E- } - <canvas id="myCanvas" width="350" height="700" style="border:1px solid #d3d3d3;">0 x" ~( }- b. I/ t
- 画布' r3 H @. e1 B' _4 x4 l
- </canvas>/ Q! h0 q7 Z9 W8 X% z# e C5 n* k
- <img src="" id="videoImage" width="350" height="700">
: b! L) g- T3 j - <button onclick="aphla()" style="height: 50px;width: 50px;">播放</button>
( }. @ S \# h, u2 @ - <button onclick="vdStop()" style="height: 50px;width: 50px;">暂停</button>: @+ L6 l. x1 s. P# \) ~
- </body>- |! a' t) K7 T: i$ A/ ^; U
复制代码javascript - var v = document.getElementById("myVideo");
* U+ K' D. Z; a# o - var c = document.getElementById("myCanvas");
, m% \: h& j, d& A2 E q2 K - // var c = document.createElement("canvas");; [7 O( o) A, O M$ u/ {/ U
- var img = document.getElementById("videoImage");5 ?' P$ M, [1 {) a% A* O
- ctx = c.getContext('2d');3 d# x+ P* j3 i( d, s3 E) J4 Q' }
- var dataUrl;
7 G4 w8 b, h) _- H% Q - const socket = new WebSocket('ws://xxxx.com:9502');
/ C& `3 M% ], x9 b2 P - //Connection opened8 `5 n2 G9 u% u1 A3 w
- socket.addEventListener('open', function (event) {; G# R& y$ k+ H! Q2 |
- // socket.send('Hello Server! im websockt');+ k) e# E1 r U& c- Y+ y- [( S
- });& j& r8 Z* v8 ?5 b6 p4 c
- // Listen for messages; \8 n) J! f1 V3 y# A
- socket.addEventListener('message', function (event) {
3 ?0 j5 ]* _, ]2 U2 ^ - console.log('Message from server ', event.data);) w2 W: T, c& S1 U4 t% p
- img.src = event.data;
- ]- ^: U7 y5 I% z+ _4 ~ - });& P/ X8 J/ L' T( o0 { Z
. @* J/ h J; m$ w) P- function playVideo() {! q k, M5 k5 b. p0 n( w L
- ctx.drawImage(v, 0, 0, 350, 700);9 U3 \# @! u8 H1 J3 k0 I2 G& c" S
- dataUrl = c.toDataURL("image/png");
+ `, t& Y. Q+ b& N( S7 A1 o - // img.src = dataUrl;; B1 y% R" `2 _ k
- socket.send(dataUrl);
6 N! H2 ~# ^# @# | - }% X) n& o# ?- f4 d# o1 i* G+ V
- var tick;
7 r- o4 }. Y, ?( z - function aphla() {
/ T- d# U8 Z& i" o - tick = setInterval(function () {9 m# z* C q: @" i" Y
- playVideo();
4 F7 S% K( s; Q - }, 1);& n- J3 ~! S. v6 z4 b3 J
- }
5 _& u P4 j/ ` - function vdStop() {* d9 Y; v" R' R2 S
- clearInterval(tick);
% _, [& T F9 Q+ R" T) a8 i) c. O7 I9 n - }
3 ?- J, Y4 b. n' }$ X8 U
复制代码 用户页面
5 N" m8 ^7 n3 bhtml - <img src="" id="liveImg">
复制代码javascript - var img = document.getElementById("liveImg");
/ V( U1 ~6 b `7 b - const socket = new WebSocket("ws://lm.com:9502");
9 j1 G0 n/ t% h: J - //8 S: b0 c% b- m/ Z5 G% B7 s
- socket.addEventListener('open',function(){. m) \: |$ T7 h# _2 M
- socket.send('Hello Server! Im live.html');
0 m0 _- t, I1 L! S I4 ]( j - });1 K, z9 k% K, u0 R
- // Listen for messages/ Y# B$ W$ _3 E2 X
- socket.addEventListener('message', function (event) {
: J& {& |8 @$ N0 f( q - //图片地址
% H1 n F. D) k0 ~0 ] - img.src = event.data;. S2 L! _" N! }* D* O G
- });# d) d: y T/ u9 I5 `
复制代码真直播应是通过rtmp推流实现的,本次功能仅作为swoole框架的一个案例用法 0 o- y; T3 _4 `* E: j% C
; O% R7 O' E# j7 K( r4 ^+ K# ~ |
|