定义
Websocket是基于TCP的一种新的网络协议。
它实现了浏览器与服务器全双工通信——允许服务器主动发送信息给客户端。
为什么需要websocket?
1)HTTP的通信,只能由客户端发起;
2)websock有以下特点:
- 建立在TCP协议上
- 性能开销小,通信高效
- 客户端可以与任意服务器通信
- 协议标识符ws wss
- 持久化网络通信协议(长链接)
使用websocket
WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手。
握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。
(1) 创建websocket对象
$ws = new swoole_websocket_server(string $host, int $port = 0);
(2)完成连接事件(可选)
当WebSocket客户端与服务器建立连接并完成握手后,会回调此函数。
$ws->on('open', function ($ws, $request) {
...
});
(3)收到客户端数据事件(必选)
$ws->on('message', function ($ws, $frame) {
...
});
$frame 是swoole_websocket_frame对象,包含了客户端发来的数据帧信息。
详情请看下图:
(4)推送数据到客户端
// 第一种模式1.7.11+可用
$ws->push(int $fd, string $data, int $opcode = 1, bool $finish = true);
// 第二种模式4.2.0+可用
$ws->push(obj $da