swoole数据缓存区如何配置控制,swoole支持什么通讯协议
Admin 2022-09-17 群英技术资讯 631 次浏览
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变量的命名:1、变量名严格区分大小写,但内置结构、关键词和用户定制的类名和函数名不区分大小写。2、变量名不能从数字开始,必须从字母或下划线开始,后面可以和任何数字、字母和下划线一起使用。
今天小编就为大家分享一篇laravel 实现划分admin和home 模块分组,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
php支持swoole,但是swoole并不是一个简单的PHP框架,正如swoole官方首页的第一句话“重新定义PHP”,千万不要用旧有php的思想来写swoole代码!swoole重新激活了PHP,php成就了swoole!
在本篇文章里小编给大家整理的是一篇关于php将xml转化对象的实例详解内容,有需要的朋友们可以跟着学习下。
项目开发中,如果有定时任务的业务要求,我们会使用linux的crontab来解决,但是它的最小粒度是分钟级别,如果要求粒度是秒级别的,甚至毫秒级别的,crontab就无法满足,值得庆幸的是swoole提供的强大的毫秒定时器。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008