swoole用什麼協議
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用什麼協議的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Laravel 中使用 Swoole 協程可以並發處理大量請求,優點包括:同時處理:允許同時處理多個請求。高效能:基於 Linux epoll 事件機制,高效處理請求。低資源消耗:所需伺服器資源更少。易於整合:與 Laravel 框架無縫集成,使用簡單。

如何使用Swoole實現高效能的HTTP反向代理伺服器Swoole是一款基於PHP語言的高效能、非同步、並發的網路通訊框架。它提供了一系列的網路功能,可以用來實作HTTP伺服器、WebSocket伺服器等。在本文中,我們將介紹如何使用Swoole來實作一個高效能的HTTP反向代理伺服器,並提供具體的程式碼範例。環境配置首先,我們需要在伺服器上安裝Swoole擴展

Swoole 和 Workerman 都是高效能 PHP 伺服器框架。 Swoole 以其非同步處理、出色的效能和可擴展性而聞名,適用於需要處理大量並發請求和高吞吐量的專案。 Workerman 提供了非同步和同步模式的靈活性,具有直覺的 API,更適合易用性和處理較低並發量的專案。

若要重新啟動 Swoole 服務,請依照下列步驟操作:檢查服務狀態並取得 PID。使用 "kill -15 PID" 停止服務。使用啟動服務的相同命令重新啟動服務。

效能比較:吞吐量:Swoole 以協程機制,吞吐量更高。延遲:Swoole 的協程上下文切換開銷更低,延遲更小。記憶體消耗:Swoole 的協程佔用記憶體較少。易用性:Swoole 提供更易於使用的並發程式設計 API。

Swoole實戰:如何使用協程進行並發任務處理引言在日常的開發中,我們常常會遇到需要同時處理多個任務的情況。傳統的處理方式是使用多執行緒或多進程來實現並發處理,但這種方式在效能和資源消耗上存在一定的問題。而PHP作為一門腳本語言,通常無法直接使用多執行緒或多進程的方式來處理任務。然而,借助於Swoole協程庫,我們可以使用協程來實現高效能的並發任務處理。本文將介

Swoole協程是一種輕量級並發函式庫,可讓開發者編寫並發程式。 Swoole協程調度機制基於協程模式和事件循環,使用協程堆疊管理協程執行,在協程讓出控制權後掛起它們。事件循環處理IO和定時器事件,協程讓出控制權時被掛起並返回事件循環。當事件發生時,Swoole從事件循環切換到掛起的協程,透過儲存和載入協程狀態完成切換。協程調度使用優先權機制,支援掛起、休眠和復原作業以靈活控制協程執行。
