這篇文章給大家分享的是有關(guān)swoole中onreceive不觸發(fā)怎么辦的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)科技有限公司專業(yè)互聯(lián)網(wǎng)基礎(chǔ)服務(wù)商,為您提供大邑服務(wù)器托管,高防服務(wù)器,成都IDC機(jī)房托管,成都主機(jī)托管等互聯(lián)網(wǎng)服務(wù)。
onReceive
接收到數(shù)據(jù)時(shí)回調(diào)此函數(shù),發(fā)生在worker進(jìn)程中。函數(shù)原型:
function onReceive(swoole_server $server, int $fd, int $reactor_id, string $data);
$server,Server對(duì)象
$fd,TCP客戶端連接的唯一標(biāo)識(shí)符
$reactor_id,TCP連接所在的Reactor線程ID
$data,收到的數(shù)據(jù)內(nèi)容,可能是文本或者二進(jìn)制內(nèi)容
關(guān)于$fd和$reactor_id 詳細(xì)的解釋
未開(kāi)啟自動(dòng)協(xié)議選項(xiàng),onReceive單次收到的數(shù)據(jù)最大為64K
開(kāi)啟了自動(dòng)協(xié)議處理選項(xiàng),onReceive將收到完整的數(shù)據(jù)包,最大不超過(guò) package_max_length
支持二進(jìn)制格式,$data可能是二進(jìn)制數(shù)據(jù)
使用底層提供的open_eof_check/open_length_check/open_http_protocol,可以保證數(shù)據(jù)包的完整性
不使用底層的協(xié)議處理,在onReceive后PHP代碼中自行對(duì)數(shù)據(jù)分析,合并/拆分?jǐn)?shù)據(jù)包。
例如:代碼中可以增加一個(gè) $buffer = array(),使用$fd作為key,來(lái)保存上下文數(shù)據(jù)。 每次收到數(shù)據(jù)進(jìn)行字符串拼接,$buffer[$fd] .= $data,然后在判斷$buffer[$fd]字符串是否為一個(gè)完整的數(shù)據(jù)包。
默認(rèn)情況下,同一個(gè)fd會(huì)被分配到同一個(gè)Worker中,所以數(shù)據(jù)可以拼接起來(lái)。使用dispatch_mode = 3時(shí)。
請(qǐng)求數(shù)據(jù)是搶占式的,同一個(gè)fd發(fā)來(lái)的數(shù)據(jù)可能會(huì)被分到不同的進(jìn)程。所以無(wú)法使用上述的數(shù)據(jù)包拼接方法
關(guān)于粘包問(wèn)題如SMTP協(xié)議,客戶端可能會(huì)同時(shí)發(fā)出2條指令。在Server中可能一次性收到,這時(shí)應(yīng)用層需要自行拆包。SMTP是通過(guò)\r\n來(lái)分包的,所以業(yè)務(wù)代碼中需要 explode("\r\n", $data)來(lái)拆分?jǐn)?shù)據(jù)包。
如果是請(qǐng)求應(yīng)答式的服務(wù),無(wú)需考慮拆分?jǐn)?shù)據(jù)的問(wèn)題。原因是客戶端在發(fā)起一次請(qǐng)求后,必須等到服務(wù)器端返回當(dāng)前請(qǐng)求的響應(yīng)數(shù)據(jù),才會(huì)發(fā)起第二次請(qǐng)求,不會(huì)同時(shí)發(fā)送2個(gè)請(qǐng)求
感謝各位的閱讀!關(guān)于“swoole中onreceive不觸發(fā)怎么辦”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
網(wǎng)頁(yè)標(biāo)題:swoole中onreceive不觸發(fā)怎么辦
本文網(wǎng)址:http://www.rwnh.cn/article48/jcjjhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、App設(shè)計(jì)、Google
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)