onReceive
#接收到資料時回呼此函數,發生在worker進程中。 函數原型: (建議學習: swoole視訊教學)
function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data);
$server,Server物件
$fd,TCP用戶端連線的唯一識別碼
$reactor_id,TCP連接所在的Reactor線程ID
$data,收到的資料內容,可能是文字或二進位內容
關於$fd和$ reactor_id 詳細的解釋
未開啟自動協定選項,onReceive單次收到的資料最大為64K
開啟了自動協定處理選項,onReceive將收到完整的資料包,最大不超過package_max_length
支援二進位格式,$data可能是二進位資料
使用底層提供的open_eof_check/open_length_check/open_http_protocol,可以保證資料包的完整性
不使用底層的協定處理,在onReceive後PHP程式碼中自行對資料分析,合併/分割資料包。
例如:程式碼中可以增加一個 $buffer = array(),使用$fd作為key,來保存上下文資料。每次收到資料進行字串拼接,$buffer[$fd] .= $data,然後在判斷$buffer[$fd]字串是否為一個完整的資料包。
預設情況下,同一個fd會被分配到同一個Worker中,所以資料可以拼接起來。使用dispatch_mode = 3時。
請求資料是搶佔式的,同一個fd發來的資料可能會被分到不同的進程。所以無法使用上述的封包拼接方法
關於黏包問題如SMTP協議,客戶端可能會同時發出2個指令。在Server中可能一次收到,這時應用層需要自行拆包。 SMTP是透過\r\n來分包的,所以業務碼中需要 explode("\r\n", $data)來分割資料包。
如果是請求應答式的服務,無需考慮拆分資料的問題。原因是客戶端在發起一次請求後,必須等到伺服器端返回目前請求的回應數據,才會發起第二次請求,不會同時發送2個請求
以上是swoole的onreceive不觸發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文概述了為Swoole項目做出貢獻的方法,包括報告錯誤,提交功能,編碼和改進文檔。它討論了初學者開始貢獻的必要技能和步驟,以及如何找到緊迫的是

本文討論了在PHP中使用Swoole的異步I/O功能用於高性能應用程序。它涵蓋安裝,服務器設置和優化策略。單詞計數:159

Swoole的反應堆模型使用事件驅動的,非阻滯I/O架構來有效地管理高持續性場景,通過各種技術優化性能。(159個字符)(159個字符)

摘要:本文討論了通過識別,隔離和固定解決SWOORE應用程序中的內存洩漏,並強調了常見原因,例如不當資源管理和不受管理的Coroutines。 Swoole Tracker和Valgrind等工具


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具