亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

swoole中onreceive不觸發怎么辦

發布時間:2021-01-21 10:34:20 來源:億速云 閱讀:413 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關swoole中onreceive不觸發怎么辦的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

onReceive

接收到數據時回調此函數,發生在worker進程中。函數原型:

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不觸發怎么辦”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

光山县| 左贡县| 冕宁县| 梁河县| 渭源县| 张掖市| 乡宁县| 揭阳市| 钟山县| 绥阳县| 新津县| 贡嘎县| 伽师县| 乡宁县| 大港区| 新绛县| 达拉特旗| 龙门县| 天全县| 松滋市| 同仁县| 贡觉县| 霞浦县| 健康| 甘孜县| 桐乡市| 都兰县| 信丰县| 黄骅市| 社旗县| 玛沁县| 东乡县| 弥勒县| 辽阳县| 饶平县| 库尔勒市| 东乌珠穆沁旗| 微博| 丰原市| 阿鲁科尔沁旗| 肇庆市|