旗下导航:搜·么
当前位置:网站首页 > PHP框架 > Swoole > 正文

swoole用什么协定【swoole】,swoole

作者:搜搜PHP网发布时间:2019-12-06分类:Swoole浏览:78


导读:TCP是一个流式的协定,客户端向服务器发送一段数据后,大概并不会被服务器一次就完全的吸收到。客户端向服务器发送多段数据,大概服务器一次就吸收到了悉数。(引荐进修:swo...

TCP是一个流式的协定,客户端向服务器发送一段数据后,大概并不会被服务器一次就完全的吸收到。客户端向服务器发送多段数据,大概服务器一次就吸收到了悉数。 (引荐进修: swoole视频教程)

在现实运用中,愿望在服务器上能够一次吸收一段完全的数据,不多也不少。

传统的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,不然将会形成分包毛病。

以上就是swoole用什么协定的细致内容,更多请关注ki4网别的相干文章!

标签:swoole