Karp 的技术博客

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

我同事帮我查询 资料

Xnip2024-02-26_15-13-24.png

pingpongWebSockets的心跳

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

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

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

code 处理如下:

Xnip2024-02-26_15-20-07.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;} 

pingopcode0x9 十进制的 9
pongopcode0xA 十进制的 10

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

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

php Webscocket

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年10月18日 07:11
9

目录

来自 《Webscocket pong 包 php 踩坑实例》
774 文章数
0 评论量
9 分类数
779 页面数
已在风雨中度过 9年279天5小时45分