+
95
-

swoole中tcp传输如何按固定包数据结构传输?

php

swoole中tcp传输如何按固定包数据结构传输?


网友回复

+
15
-

swoole提供了内置包长检测的方法,该方法提供了固定包头 + 包体这种格式协议的解析。

启用后,可以保证 Worker 进程 onReceive 每次都会收到一个完整的数据包。

长度检测协议,只需要计算一次长度,数据处理仅进行指针偏移,性能非常高,推荐使用。 可见官方是推荐使用这种方式的,就是配置比其他方案要复杂一些, 首先贴一下配置: $server->set([ // 打开包长检测特性 'package_length_check' => true, // 包头中某个字段作为包长度的值,底层支持了 10 种长度类型。可参考 pack() 方法 'package_length_type' => 'N', // length 长度值在包头的第几个字节。 'package_length_offset' => 8, // 从第几个字节开始计算长度,一般有 2 种情况: //length 的值包含了整个包(包头 + 包体),package_body_offset 为 0 //包头长度为 N 字节,length 的值不包含包头,仅包含包体,package_body_offset 设置为 N 'package_body_offset' => 16, // 设置最大数据包尺寸,单位为字节 'package_max_length' => 81920 ]); 下面是一个数据包结构例子,可以很好的体现了字段含义。

下面看具体的示例代码:

tcp服务端代码

<?php
$serv = new Swoole\Server('127.0.0.1', 9...

点击查看剩余70%

我知道答案,我要回答