LEN

Webscocket pong 包 php 踩坑实例
故事背景是这样的. 我要接入某安的 webscocket推送服务, 但这个服务要求接到ping后10分钟内必须返回...
扫描右侧二维码阅读全文
15
2019/11

Webscocket pong 包 php 踩坑实例

故事背景是这样的. 我要接入某安的 webscocket推送服务, 但这个服务要求接到ping后10分钟内必须返回一个pong 包.
因为之前没用过php 的 ping-pong 包, 所以以为pong 就是 send 字符串 pong 就可以了, 某安的文档中也没有 pong包示例.

我同事帮我查询资料
pong.png

ping 和 pong :WebSockets的心跳

在握手之后客户端或服务端都可以选择向另一方发送ping。收到ping消息后,接受者必须尽快发回pong消息。您可以使用此方式来确保客户端仍处于连接状态。

ping 和 pong 只是一个常规的消息帧,但它是一个 管理帧. pingopcode0x9pongopcode0xA。当你得到ping消息,回复一个pong消息, 带有完全相同的数据(对于pingpong,最大数据长度为125字节).可能在你没法ping的时候也能收到pong消息 ,这种情况下直接忽略就可以了.

如果在你回pong消息之前你收到了不止一个ping消息, 那么你只用回一个pong消息即可.

code 处理如下:

code.png

ping 包格式 因为是对象类型 所以使用 serialize 序列化

2019/11/07 17:16:53 | 6440 0 Pong  s O:26:"Swlib\Saber\WebSocketFrame":4:{s:6:"finish";b:1;s:6:"opcode";i:9;s:4:"data";s:13:"1573118213940";s:2:"fd";i:0;} 

ping 包 opcode 为 0x9 十进制的 9
pong 包 opcode 为 0xA 十进制的 10

    self::$websocket->push('pong', 10, true);

我这个 pong 是不规范的 应该是 $data->data 的数据原路 push 回去.

最后修改:2019 年 11 月 16 日 10 : 46 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论