Rumah rangka kerja php Swoole swoole用什么协议

swoole用什么协议

Dec 06, 2019 am 10:44 AM
swoole

swoole用什么协议

TCP是一个流式的协议,客户端向服务器发送一段数据后,可能并不会被服务器一次就完整的接收到。客户端向服务器发送多段数据,可能服务器一次就接收到了全部。                    (推荐学习: swoole视频教程

在实际应用中,希望在服务器上能够一次接收一段完整的数据,不多也不少。

传统的TCP服务器中,往往需要由程序员维护一个缓存区,先将读取到数据写入缓存区,然后再通过预先设定好的协议内容来区分一段完整数据的开头、结尾和长度,并将一段完整的数据交给逻辑部分处理,这就是自定义协议的功能。

在Swoole中已经在底层实现了一个数据缓存区,并内置了几种常用的协议类型,并直接在底层做好了数据的拆分,以保证在onReceive回调函数中,一定能够收到一个或数个完整的数据段。

数据缓存区的大小可以通过配置pakcage_max_length来控制。

$configs = [];
$configs["package_max_length"] = 8192;
$server->set($configs);
Salin selepas log masuk

swoole目前支持两种通讯协议:EOF结束符协议、固定包头加包体协议

package_max_length
Salin selepas log masuk

package_max_length用于设置最大数据包尺寸,当开启open_length_check或open_eof_check或open_http_protocol等协议解析后,Swoole底层会进程数据包拼接,此时在数据包未收取完整时,所有数据都将保存在内存中。

所以需要设置package_max_length一个数据包最大允许占用的内存尺寸。

如果同时有1万个TCP连接在发送数据,每个数据包2MB,在最极端的情况下会占用20GB的内存空间。所以此参数不宜设置过大,否则会占用很大的内存。

相关配置选项

open_length_check
Salin selepas log masuk

当发现数据包长度超过package_max_length时会直接丢弃此数据并关闭连接,因此不会占用任何内存,适用于websocket、mqtt、http2协议。

open_eof_check
Salin selepas log masuk

由于无法事先得知数据包的长度,所以接收到的数据还是会保存在内存中持续增长。当发现内存占用已经超过package_max_length时,将直接丢地此数据包并关闭连接。

open_http_protocol
Salin selepas log masuk

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-7.gif

Atas ialah kandungan terperinci swoole用什么协议. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Mana satu lebih baik, swool atau pekerja? Mana satu lebih baik, swool atau pekerja? Apr 09, 2024 pm 07:00 PM

Mana satu lebih baik, swool atau pekerja?

Cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi Cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi Nov 07, 2023 am 08:18 AM

Cara menggunakan Swoole untuk melaksanakan pelayan proksi terbalik HTTP berprestasi tinggi

Cara menggunakan coroutine swoole dalam laravel Cara menggunakan coroutine swoole dalam laravel Apr 09, 2024 pm 06:48 PM

Cara menggunakan coroutine swoole dalam laravel

Bagaimanakah swoole_process membenarkan pengguna bertukar? Bagaimanakah swoole_process membenarkan pengguna bertukar? Apr 09, 2024 pm 06:21 PM

Bagaimanakah swoole_process membenarkan pengguna bertukar?

Bagaimana untuk memulakan semula perkhidmatan dalam rangka kerja swoole Bagaimana untuk memulakan semula perkhidmatan dalam rangka kerja swoole Apr 09, 2024 pm 06:15 PM

Bagaimana untuk memulakan semula perkhidmatan dalam rangka kerja swoole

Mana satu yang mempunyai prestasi yang lebih baik, swoole atau java? Mana satu yang mempunyai prestasi yang lebih baik, swoole atau java? Apr 09, 2024 pm 07:03 PM

Mana satu yang mempunyai prestasi yang lebih baik, swoole atau java?

Swoole Advanced: Cara Mengoptimumkan Penggunaan CPU Pelayan Swoole Advanced: Cara Mengoptimumkan Penggunaan CPU Pelayan Nov 07, 2023 pm 12:27 PM

Swoole Advanced: Cara Mengoptimumkan Penggunaan CPU Pelayan

Swool dalam tindakan: Cara menggunakan coroutine untuk pemprosesan tugas serentak Swool dalam tindakan: Cara menggunakan coroutine untuk pemprosesan tugas serentak Nov 07, 2023 pm 02:55 PM

Swool dalam tindakan: Cara menggunakan coroutine untuk pemprosesan tugas serentak

See all articles