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

Gateway監(jiān)聽多個端口(每個端口的協(xié)議不同)時,不能同時工作

kenny534

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

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

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

// 初始化 gateway 進程
$gateway = new Gateway("book://0.0.0.0:9526");
// 設(shè)置名稱,方便status時查看
$gateway->name = 'AppGateway';
$gateway->count = 1;
// 分布式部署時請設(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ù)注冊地址
$gateway->registerAddress = "192.168.18.9:1237";

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

//運行所有Worker;
Worker::runAll();

請問這是GatewayWorker模型的設(shè)計所致,還是哪里使用的不對頭?

6159 4 0
4個回答

kenny534

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

  • 暫無評論
walkor 打賞

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

  • kenny534 2019-09-17

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

  • walkor 2019-09-17

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

  • kenny534 2019-09-17

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

  • kenny534 2019-09-17

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

  • latin 2019-09-18

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

phpcreeper

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


$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();
    }
};
  • 暫無評論
kenny534

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

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