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

關(guān)于onMessage回調(diào)方法每次的傳輸大小的問(wèn)題

蝸牛

我想請(qǐng)問(wèn)一下這個(gè)方法如果用來(lái)接收二進(jìn)制流數(shù)據(jù)的,每次接收多少字節(jié),還有我如何才知道這個(gè)二進(jìn)制流數(shù)據(jù)是否已經(jīng)傳輸完畢呢?謝謝。

3169 12 0
12個(gè)回答

walkor 打賞

workerman支持自定義通訊協(xié)議,每次接收多少字節(jié)是自己根據(jù)協(xié)議來(lái)確定的。
一般協(xié)議頭里包含了這個(gè)包的大小。

通訊協(xié)議參考手冊(cè) http://doc.workerman.net/315123

  • 暫無(wú)評(píng)論
蝸牛

您是指使用frame協(xié)議嗎?這個(gè)協(xié)議是如何使用的?有沒(méi)例子說(shuō)明使用方法呢

  • 暫無(wú)評(píng)論
蝸牛

我現(xiàn)在是這樣使用的。

$tcp_worker = new Worker("tcp://0.0.0.0:8333");
$tcp_worker->onMessage = function($connection, $data)
{
//但這個(gè)$data是每次都只獲取一點(diǎn)數(shù)據(jù),而不是所有的數(shù)據(jù),那我如何知道它這次有沒(méi)傳輸出完成?
}

  • 暫無(wú)評(píng)論
walkor 打賞

可以參考frame協(xié)議的方式,將包長(zhǎng)放到包的頭部,也就是前4個(gè)字節(jié)是網(wǎng)絡(luò)字節(jié)序的整數(shù)。
frame協(xié)議實(shí)現(xiàn)參考手冊(cè)。http://doc.workerman.net/315308 ,其中打包解包都有。

workerman里協(xié)議設(shè)定很簡(jiǎn)單,類似這樣

// tcp改成frame
$tcp_worker = new Worker("frame://0.0.0.0:8333");
$tcp_worker->onMessage = function($connection, $data)
{
    ///這里$data會(huì)是完整的數(shù)據(jù)
}

客戶端frame實(shí)現(xiàn)根據(jù)客戶端語(yǔ)言而定。我這里沒(méi)有其它語(yǔ)言的例子。

一般長(zhǎng)連接通訊中不能使用裸tcp來(lái)做,裸tcp會(huì)發(fā)生數(shù)據(jù)被分段傳輸以及數(shù)據(jù)粘包的現(xiàn)象,這部分說(shuō)明參考workerman手冊(cè) http://doc.workerman.net/315124

  • 暫無(wú)評(píng)論
蝸牛

那我要在這個(gè)里面有時(shí)候需要傳text,有時(shí)候需要傳二進(jìn)制流,這個(gè)鏈接里面我如何知道是哪種類型呢?謝謝。

  • 暫無(wú)評(píng)論
walkor 打賞

可以在頭部再加一個(gè)字節(jié)來(lái)區(qū)分

  • 暫無(wú)評(píng)論
蝸牛

能否舉個(gè)例子?
比如我和硬件協(xié)議的是
img:40142|二進(jìn)制流內(nèi)容+"\n"
txt:12|文本內(nèi)容+"\n"

  • 暫無(wú)評(píng)論
蝸牛

我使用的也是php語(yǔ)言,那服務(wù)器端是如何接收數(shù)據(jù)呢?

class Frame
{
    public static function input($buffer ,TcpConnection $connection)
    {
        if(strlen($buffer)<4)
        {
            return 0;
        }
        $unpack_data = unpack('Ntotal_length', $buffer);
        return $unpack_data;
    }

    public static function decode($buffer)
    {
        return substr($buffer, 4);
    }

    public static function encode($buffer)
    {
        $total_length = 4 + strlen($buffer);
        return pack('N',$total_length) . $buffer;
    }
}

這個(gè)如何使用?

  • 暫無(wú)評(píng)論
walkor 打賞

請(qǐng)把worekrman手冊(cè)看完吧。
手冊(cè)里都有。
上面講的都是在手冊(cè)里的。

  • 暫無(wú)評(píng)論
蝸牛

http://doc.workerman.net/315125這個(gè)網(wǎng)址有說(shuō),

但說(shuō)到關(guān)鍵的地方:

use Workerman\Worker;
require_once '/your/path/Workerman/Autoloader.php'
$json_worker = new Worker('JsonNL://0.0.0.0:1234');
$json_worker->onMessage = ...
...

這個(gè)后面的內(nèi)容也是
$tcp_worker->onMessage = function($connection, $data)
{
   //這里沒(méi)說(shuō)如何獲取數(shù)據(jù),難道就直接獲取$data就可以取到二進(jìn)制流的內(nèi)容?
}
  • 暫無(wú)評(píng)論
蝸牛

老大人呢?

  • 暫無(wú)評(píng)論
xiuwang

是啊,$data就是要接受的內(nèi)容。
老哥,你有提問(wèn)等待這么長(zhǎng)的時(shí)間為何不去自己試下呢?幾分鐘的事兒...

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??