open_eof_split
启用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)
