🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# open\_eof\_split [TOC] 启用`EOF`自动分包。当设置`open_eof_check`后,底层检测数据是否以特定的字符串结尾来进行数据缓冲。但默认只截取收到数据的末尾部分做对比。这时候可能会产生多条数据合并在一个包内。 `EOF`切割需要遍历整个数据包的内容,查找`EOF`,因此会消耗大量`CPU`资源。假设每个数据包为`2M`,每秒`10000`个请求,这可能会产生`20G`条`CPU`字符匹配指令。 ## 参数类型 * 布尔型,必须为`true`或`false`,传入其他类型数值会被强制转为布尔型 启用`open_eof_split`参数后,底层会从数据包中间查找`EOF`,并拆分数据包。`onReceive`每次仅收到一个以`EOF`字串结尾的数据包。 启用`open_eof_split`参数后,无论参数`open_eof_check`是否设置,`open_eof_split`都将生效。 ## 与`open_eof_check`的差异 * `open_eof_check`只检查接收数据的末尾是否为`EOF`,因此它的性能最好,几乎没有消耗 * `open_eof_check`无法解决多个数据包合并的问题,比如同时发送两条带有`EOF`的数据,底层可能会一次全部返回 * `open_eof_split`会从左到右对数据进行逐字节对比,查找数据中的`EOF`进行分包,性能较差。但是每次只会返回一个数据包 ~~~ array( 'open_eof_split' => true, //打开EOF_SPLIT检测 'package_eof' => "\r\n", //设置EOF ) ~~~