企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 1.7.3 固定包头+包体协议自动分包 swoole-1.7.3版本重构了length_check特性的代码,对于固定包头+包体格式的协议可以直接在master进程中进行分包和组包,worker进程中可以一次性收到一个完整的包。配合dispatch_mode = 1或3,swoole提供了一个强大的半异步/半同步服务器模型。带来的好处是: * C扩展层进行协议的处理,性能最佳,原PHP代码虽然也可以实现协议处理,但需要耗费较多CPU * TCP连接与业务逻辑分离,有效利用所有Worker进程,即使只有1个TCP连接,也可以利用所有Worker 使用方法: ===== 使用也很简单,仅需$serv->set中增加参数即可。 open_length_check => true ---- 打开包长检测特性 package_length_type => 'N' ---- 长度字段的类型,固定包头中用一个4字节或2字节表示包体长度。类型是一个字符,详情参见php的[pack](http://php.net/manual/zh/function.pack.php)函数文档 比较常用的类型为: * N 4字节网络字节序,最大为2^32 * n 2字节网络字节序,最大为65536 package_length_offset => 10 ----- 从第几个字节开始是长度,比如包头长度为120字节,第10个字节为长度值,这里填入9(从0开始计数) package_body_offset => 120 ----- 从第几个字节开始计算长度,比如包头为长度为120字节,第10个字节为长度值,包体长度为1000。如果长度包含包头,这里填入0,如果不包含包头,这里填入120 package_max_length => 800000 ----- 最大允许的包长度。因为在一个请求包完整接收前,需要将所有数据保存在内存中,所以需要做保护。避免内存占用过大。 配置分发策略 ==== dispatch_mode = 1 或 3 1:轮询分配,会逐个分配到所有worker,3:争抢分配,仅分配给空闲状态的worker