swoole数据缓存区如何配置控制,swoole支持什么通讯协议
Admin 2022-09-17 群英技术资讯 835 次浏览
TCP是一个流式的协议,客户端向服务器发送一段数据后,可能并不会被服务器一次就完整的接收到。客户端向服务器发送多段数据,可能服务器一次就接收到了全部。
在实际应用中,希望在服务器上能够一次接收一段完整的数据,不多也不少。
传统的TCP服务器中,往往需要由程序员维护一个缓存区,先将读取到数据写入缓存区,然后再通过预先设定好的协议内容来区分一段完整数据的开头、结尾和长度,并将一段完整的数据交给逻辑部分处理,这就是自定义协议的功能。
在Swoole中已经在底层实现了一个数据缓存区,并内置了几种常用的协议类型,并直接在底层做好了数据的拆分,以保证在onReceive回调函数中,一定能够收到一个或数个完整的数据段。
数据缓存区的大小可以通过配置pakcage_max_length来控制。
$configs = []; $configs["package_max_length"] = 8192; $server->set($configs);
swoole目前支持两种通讯协议:EOF结束符协议、固定包头加包体协议
package_max_length
package_max_length用于设置最大数据包尺寸,当开启open_length_check或open_eof_check或open_http_protocol等协议解析后,Swoole底层会进程数据包拼接,此时在数据包未收取完整时,所有数据都将保存在内存中。
所以需要设置package_max_length一个数据包最大允许占用的内存尺寸。
如果同时有1万个TCP连接在发送数据,每个数据包2MB,在最极端的情况下会占用20GB的内存空间。所以此参数不宜设置过大,否则会占用很大的内存。
相关配置选项
open_length_check
当发现数据包长度超过package_max_length时会直接丢弃此数据并关闭连接,因此不会占用任何内存,适用于websocket、mqtt、http2协议。
open_eof_check
由于无法事先得知数据包的长度,所以接收到的数据还是会保存在内存中持续增长。当发现内存占用已经超过package_max_length时,将直接丢地此数据包并关闭连接。
open_http_protocol
HTTP的GET请求最大允许8KB数据且无法修改此配置,POST请求会检测Content-Type,如果发现超过package_max_length则直接丢地此数据,并发送HTTP 400错误并关闭连接。
EOF协议
使用一组固定的、不会在正常数据内出现的字符串/r/n作为分割协议的标记,称之为EOF协议。
什么是EOF协议呢?
EOF全称 End of File,使用\r\n作为结束标记。
在逐个读取数据流中的数据时,如果发现读到EOF标记,就表示已经读到数据末尾。
在TCP的数据流中,使用EOF协议的数据流的特征是|数据|EOF|数据|EOF|。
EOF协议处理的原理是在每串正常数据的末尾会添加一个预先规定的且绝对不会再数据中出现的字符串作为结束标记,这样接收到的数据就可以根据EOF标记来切分数据。
典型的memcached、ftp、stmp都是使用/r/n作为结束符。当发送数据时只要在数据包的末尾添加/r/n即可。
使用EOF协议处理一定要确保数据包中间不会出现EOF,否则将会造成分包错误。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。本文将详细讲讲PHP反序列化漏洞的原理及示例,感兴趣的可以了解一下
这篇文章主要介绍了布隆过滤器(bloom filter)介绍以及php和redis实现布隆过滤器实现方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
主要是在登录和退出的时候,设置cookies。来保存登录和安全退出1:在登录页面设置//设置cookies的值_setcookies($_rows['tg_username'],$_rows['tg_uniqid'],$_clean['time']);_location(null,'index.php');第二步:生成cookie,/***_setcookies*@
php序列化和反序列化怎么操作?优缺点是什么?一些朋友对于php序列化和反序列化不是很了解,对此这篇文章就给大家介绍一下关于php常见的序列化和反序列化操作,感兴趣的朋友可以看看。
PHP策略模式包括哪些,核心代码是什么?一些朋友可能会遇到这方面的问题,对此在下文小编向大家来讲解一下,内容详细,易于理解,希望大家阅读完这篇能有收获哦,有需要的朋友就往下看吧!
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008