Swoole从入门到入土(16)——WebSocket服务器[事件]

SwooleWebSocket服务器:协议兼容与事件详解,
本文介绍了SwooleWebSocket服务器如何兼容HTTP协议以及其特有的onHandShake、onOpen和onMessage事件。在Swoole中,WebSocketServer继承自HttpServer,支持HTTP服务器事件,并详细阐述了自定义握手过程、onHandShake事件回调的使用方法和注意事项,以及onMessage事件在接收到客户端数据帧时的处理。

WIKI:

问:websocket协议虽然和http协议不同,但是兼容于http协议,如何判断客户端连接使用的是http协议?

答:通过使用 $server->connection_info($fd) 获取连接信息,返回的数组中有一项为 websocket_status,根据此状态可以判断是否为 WebSocket 客户端。

---------- 正文的分割线 -------------

Swoole\WebSocket\Server继承自Swoole\Http\Server,所以websocket server支持http server和tcp server的所有事件。另外,新增加了以下3个事件:

· onMessage (必选)

· onOpen 和 onHandShake (可选)

事件详解

onHandShake:WebSocket 建立连接后进行握手。WebSocket 服务器会自动进行 handshake 握手的过程,如果用户希望自己进行握手处理,可以设置 onHandShake 事件回调函数。

onHandShake(Swoole\Http\Request $request, Swoole\Http\Response $response);

· onHandShake 事件回调是可选的,需要自行处理 handshake 的时候,再设置这个回调函数。如果您不需要 “自定义” 握手过程,那么不要设置该回调,用 Swoole 默认的握手即可。
· 设置 onHandShake 回调函数后不会再触发 onOpen 事件,需要应用代码自行处理
· onHandShake 中必须调用 response->status() 设置状态码为 101 并调用 response->end() 响应,否则会握手失败.
· 内置的握手协议为 Sec-WebSocket-Version: 13,低版本浏览器需要自行实现握手
· 可以使用 server->defer 调用 onOpen 逻辑

示例:

$server->on('handshake', function (\Swoole\Http\Request $request, \Swoole\Http\Response $response) {
        // print_r( $request->header );
        // if (如果不满足我某些自定义的需求条件,那么返回end输出,返回false,握手失败) {
        //    $response->end();
        //     return false;
        // }

        // websocket握手连接算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值