国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

客戶端往gatewayworker發(fā)送txt文件流,接收時報錯

bijingjieshen

問題如下:
客戶端發(fā)送一個100K左右的文件,每次發(fā)送1024長度的數(shù)據(jù),發(fā)送最后一個數(shù)據(jù)的時候把0xbbbb作為校驗位追加到數(shù)據(jù)結(jié)尾然后發(fā)送

服務(wù)器在text協(xié)議的input函數(shù)改為檢查0xbbbb位置,然后返回 return $pos+2;

我的理解是客戶端分多次把數(shù)據(jù)發(fā)送完,gatewayworker也是分包接收然后根據(jù)最后的校驗位0xbbbb作為包的結(jié)束。

可是在發(fā)送的時候,客戶端斷開了,gatewayworker也沒有收到完整的數(shù)據(jù)。所以想請教@walkor,gatewayworker在接受的時候是怎么處理的?怎樣解決接收大量數(shù)據(jù)完整性問題? 謝謝!

4318 6 0
6個回答

walkor 打賞

協(xié)議實現(xiàn)貼一下,應(yīng)該是寫錯了,或者客戶端發(fā)錯了

  • 暫無評論
bijingjieshen
public static function input($buffer)
{
    // 檢測0xbbbb位置(兩個字節(jié))
    $check_byte = shorttobytes(48059);
    $check = tostr($check_byte);
    $pos = strpos($buffer, $check);

    return $pos+2;
}

用的是text協(xié)議

  • 暫無評論
bijingjieshen

還有一個問題就是數(shù)據(jù)量很小的txt可以成功接收到,但是數(shù)據(jù)量一大就會出現(xiàn)上面的接收問題。

  • 暫無評論
bijingjieshen

這個是報錯信息
SendBufferToWorker fail. May be the send buffer are overflow. See http://wiki.workerman.net/Error2 for detail
SendBufferToWorker fail. The connections between Gateway and BusinessWorker are not ready. See http://wiki.workerman.net/Error3 for detail
worker exit with status 64000

  • 暫無評論
bijingjieshen

問題解決了,因為不小心誤刪了input中的

if($pos === false)
{
    return 0;
}

發(fā)現(xiàn)自己好蠢,哎?。。?br /> 我這幾天仔細(xì)查看了workerman協(xié)議部分的代碼,因為刪除了上面的代碼,所以客戶端傳輸大量數(shù)據(jù)的時候,$pos會返回false,所以客戶端會斷開。加上上面代碼后,就能循環(huán)接受大量數(shù)據(jù),直到接收到結(jié)尾符。
雖然是自己的疏忽造成的問題,但是通過這個問題,讓我更加了解workerman內(nèi)部的處理。
謝謝@walkor,一下子就知道了協(xié)議問題。非常感謝!很好的框架!

  • 暫無評論
walkor 打賞

不客氣

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??