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

Gateway監(jiān)聽(tīng)多個(gè)端口(每個(gè)端口的協(xié)議不同)時(shí),不能同時(shí)工作

kenny534

如題:只有第一個(gè)端口(9526)可以觸發(fā)Events的onMessage方法,而9527端口只能連接上,onMessage不會(huì)被調(diào)用到

$register = new Register('text://0.0.0.0:1237');

//初始化 bussinessWorker 進(jìn)程
$worker = new BusinessWorker();
// worker名稱
$worker->name = 'AppBusinessWorker';
// bussinessWorker進(jìn)程數(shù)量
$worker->count = 2;
// 服務(wù)注冊(cè)地址
$worker->registerAddress = '192.168.18.9:1237';
//設(shè)置處理業(yè)務(wù)的類,此處制定Events的命名空間
$worker->eventHandler = 'app\kenny\controller\Events';

// 初始化 gateway 進(jìn)程
$gateway = new Gateway("book://0.0.0.0:9526");
// 設(shè)置名稱,方便status時(shí)查看
$gateway->name = 'AppGateway';
$gateway->count = 1;
// 分布式部署時(shí)請(qǐng)?jiān)O(shè)置成內(nèi)網(wǎng)ip(非127.0.0.1)
$gateway->lanIp = '192.168.18.9';

$gateway->startPort = 2300;
// 心跳間隔
$gateway->pingInterval = 180;
$gateway->pingNotResponseLimit = 1;
// 心跳數(shù)據(jù)
$gateway->pingData = "\n|\n";
// 服務(wù)注冊(cè)地址
$gateway->registerAddress = "192.168.18.9:1237";

$gateway->onWorkerStart = function ($gateway){
    if ($gateway->id === 0){ //僅在第二個(gè)gateway中監(jiān)聽(tīng)websocket
        $inner_gateway = new Gateway("text://0.0.0.0:9527");
        $inner_gateway->reusePort = true;
        $inner_gateway->listen();
    }
};

//運(yùn)行所有Worker;
Worker::runAll();

請(qǐng)問(wèn)這是GatewayWorker模型的設(shè)計(jì)所致,還是哪里使用的不對(duì)頭?

6004 4 0
4個(gè)回答

kenny534

追問(wèn)一下:GatewayWorker是否可以實(shí)現(xiàn)協(xié)議之間的通訊?
例如:開啟兩個(gè)gateway : gateway1(text協(xié)議) 和 gateway2(websocket) ,實(shí)現(xiàn)在兩個(gè)端口上監(jiān)聽(tīng)。
在gateway1 接收消息,再?gòu)膅ateway2發(fā)送出去,或者從gateway2收到消息,再發(fā)到gateway1上去,當(dāng)然,這就涉及到“協(xié)議間通訊”的問(wèn)題了。請(qǐng)問(wèn)是否能夠支持呢?

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

http://doc2.workerman.net/multi-protocols.html
多協(xié)議支持請(qǐng)參考手冊(cè)

  • kenny534 2019-09-17

    能否在onMessage回調(diào)中增加一個(gè)“協(xié)議名稱”的參數(shù),用于識(shí)別當(dāng)前數(shù)據(jù)是哪個(gè)協(xié)議下發(fā)來(lái)的,而不是通過(guò)判斷數(shù)據(jù)的結(jié)構(gòu)特點(diǎn)先識(shí)別出協(xié)議,再調(diào)用該協(xié)議下的decode方法?
    如果有這個(gè)參數(shù)的話,那么 onMessage里可以讓代碼簡(jiǎn)化一些,例如:
    if ($protocol == 'text' ) {
    $message = text::decode($buffer);
    }
    if ($protocol == 'websocket' ){
    $message = websocket::decode($buffer);
    }
    //上述代碼應(yīng)該不能正常運(yùn)行,是偽代碼。
    https://wenda.workerman.net/question/57
    這個(gè)鏈接中的方法需要判斷$buffer的格式來(lái)識(shí)別協(xié)議,當(dāng)前的版本如果要實(shí)現(xiàn)我的上述想法,應(yīng)該怎么做?框架是否可以考慮增加一個(gè)可選參數(shù),比如叫 $protocol ?

  • walkor 2019-09-17

    協(xié)議是和端口綁定的,可以通過(guò)端口來(lái)判斷協(xié)議類型。參考手冊(cè) http://doc2.workerman.net/get-gateway-port.html

  • kenny534 2019-09-17

    怎樣才能調(diào)用到協(xié)議的decode/encode方法呢?我寫的那小段運(yùn)行報(bào)錯(cuò)。

  • kenny534 2019-09-17

    1:
    在gateway3.0.13下,無(wú)法像(https://wenda.workerman.net/question/57)文中提到的
    $message = yourIOSProtocol::decode($buffer);
    這樣調(diào)用自定義協(xié)議的解碼方法,如果用require '..../yourIOSProtocol.php',又會(huì)報(bào)重復(fù)定義的錯(cuò)誤。煩請(qǐng)給一個(gè)示例
    2:
    《多協(xié)議支持》章節(jié)最底部的說(shuō)明:
    /支持多協(xié)議還有其他的方法,比如通過(guò)協(xié)議自身的特點(diǎn)區(qū)分當(dāng)前是哪種協(xié)議,然后分別調(diào)用相應(yīng)協(xié)議的解碼方法,這樣可以做到只開一個(gè)端口就可以支持多種協(xié)議的效果/
    如何實(shí)現(xiàn)“分別調(diào)用相應(yīng)協(xié)議的解碼方法”呢?調(diào)用之后,怎樣找到對(duì)端,將數(shù)據(jù)發(fā)出去。

  • latin 2019-09-18

    多協(xié)議用群主發(fā)的文檔的方式不用調(diào)用協(xié)議的decode/encode方法啊,怎么感覺(jué)你搞復(fù)雜了。

phpcreeper

使用姿勢(shì)不正確, 原因是 gateway的用戶回調(diào)onWorkerStart 的內(nèi)部端口此時(shí)并不能與bussinessworker建立連接,按官方手冊(cè)方法玩吧,非要這么用的話,參考代碼:


$gateway->onWorkerStart = function($gateway){
    if ($gateway->id === 0)
    {
        //step-1
        $inner_gateway = new Gateway("text://0.0.0.0:9527");
        $inner_gateway->reusePort = true;
        $inner_gateway->lanIp = '127.0.0.1';
        $inner_gateway->startPort = 3900;
        $inner_gateway->lanPort = $inner_gateway->startPort + $gateway->id;
        $inner_gateway->registerAddress = ;
        $inner_gateway->onConnect  = array($inner_gateway, 'onClientConnect');
        $inner_gateway->onClose = array($inner_gateway, 'onClientClose');
        $inner_gateway->onMessage = array($inner_gateway, 'onClientMessage');
        $inner_gateway->listen();

        //step-2
        $worker = new Worker("GatewayProtocol://{$inner_gateway->lanIp}:{$inner_gateway->lanPort}");
        $worker->name = 'testWorker';
        $worker->onMessage = array($inner_gateway, 'onWorkerMessage');
        $worker->onConnect = array($inner_gateway, 'onWorkerConnect');
        $worker->onClose   = array($inner_gateway, 'onWorkerClose');
        $worker->listen();

        //step-3
        $inner_gateway->registerAddress();
    }
};
  • 暫無(wú)評(píng)論
kenny534

謝謝兩位的回復(fù),繼續(xù)學(xué)習(xí)……

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