tcp 长链接模式下,使用固定消息头长度的方式进行消息 拆包 ,解决 粘包 问题。
固定消息头协议
将消息头的前N个字节固定为 消息长度位 ,结合业务场景, 2bytes
或 4bytes
,读取消息时先读取 消息长度位 ,即可按具体的 消息长度 读取 消息内容 。
pack/unpack
可以 打包数值至二进制 / 解包二进制至数值 ,具体的模式可以参考pack/unpack
详细用法,这里我们选用固定头长度为 2bytes
来表示 消息体长度 ,最大能表示 2^16 - 1
长度的消息体,不够你就上 4bytes
好了。
组包
<?php
// msg protocol
// | ---- dataLen ---- | data |
// | - fixed 2bytes - |
// 模拟客户端连续发送2条消息
$foo = "hello world";
$bar = "i am sqrt_cat";
$package = "";
// 使用 n 打包 固定2bytes
$fooLenn =