站長資訊網
        最全最豐富的資訊網站

        swoole的onreceive不觸發

        swoole的onreceive不觸發

        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是通過rn來分包的,所以業務代碼中需要 explode("rn", $data)來拆分數據包。

        如果是請求應答式的服務,無需考慮拆分數據的問題。原因是客戶端在發起一次請求后,必須等到服務器端返回當前請求的響應數據,才會發起第二次請求,不會同時發送2個請求

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 欧美成人精品网站播放 | 99久久99久久精品国产片| 欧美日韩在线精品一区二区三区激情综合| 蜜国产精品jk白丝AV网站| 精品福利一区二区三区| 久久99精品久久久久久| 精品人无码一区二区三区| 亚洲av午夜精品一区二区三区| 久久精品国产半推半就| 久久夜色精品国产噜噜亚洲AV| 久久久这里有精品中文字幕| 99久久99久久精品国产片果冻| 99精品久久精品| 久久久久人妻精品一区二区三区| 久久精品中文字幕第23页| 777国产盗摄偷窥精品0OOO| 91麻豆精品国产| 国产精品网站在线观看免费传媒| 亚洲AV无码成人精品区狼人影院| 国产精品久久久天天影视香蕉 | 中文字幕精品久久| 欧美亚洲日本久久精品| 精品午夜福利1000在线观看| 国产精品第一区第27页| 亚洲愉拍自拍欧美精品| 欧美精品第欧美第12页| 久久国产免费观看精品| 国产精品一区二区久久精品| 成人精品一区二区三区中文字幕| 国内精品久久久久影院日本 | 久久国产精品无码一区二区三区 | 日本一区二区三区精品中文字幕| 国产99re在线观看只有精品| 99国产欧美精品久久久蜜芽| 精品无码久久久久久尤物| 精品国产一区二区三区无码| 日韩精品久久久久久免费| 亚洲国产精品无码专区| 日产精品99久久久久久| 久热这里只有精品视频6| 久久精品国产亚洲AV嫖农村妇女 |