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 =

本文介绍了TCP长链接模式下如何利用固定消息头长度解决粘包和拆包问题。通过设置消息头的前N个字节为消息长度,可以确保在读取时准确获取消息内容。在短连接单个消息或长链接模式下,粘包问题可能导致服务端无法正确判断消息边界,此时需要定义协议和拆包策略。内容适用于PHP开发者在进阶过程中的网络编程学习。
最低0.47元/天 解锁文章

255

被折叠的 条评论
为什么被折叠?



