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

workerman 內(nèi)部創(chuàng)建的端口提示端口被占用

fyang

問題描述

tcp長連接程序,里面啟動(dòng)了一個(gè)Text協(xié)議的內(nèi)部端口程序,執(zhí)行 php think start 報(bào)錯(cuò),提示 內(nèi)部端口 Address already in use

首先排除端口被占用的問題,因?yàn)槲乙呀?jīng)換了個(gè)端口,還是報(bào)這個(gè)錯(cuò)誤

截圖

程序代碼

Worker::$pidFile = '/var/run/workerman_relay.pid';
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
    // 啟動(dòng)4個(gè)進(jìn)程對外提供服務(wù)
    $tcp_worker->count = 4;

    //---------------------------------- onWorkerStart start ---------------------------
    $tcp_worker->onWorkerStart = function($tcp_worker) {
    Timer::add(10, function () use ($tcp_worker) {
    $time_now = time();
    foreach ($tcp_worker->connections as $connection) {
    // 有可能該connection還沒收到過消息,則lastMessageTime設(shè)置為當(dāng)前時(shí)間
    if (empty($connection->lastMessageTime)) {
    $connection->lastMessageTime = $time_now;
    continue;
    }

    // 上次通訊時(shí)間間隔大于心跳間隔,則認(rèn)為客戶端已經(jīng)下線,關(guān)閉連接
    if ($time_now - $connection->lastMessageTime > Relay::$heartbeat_time){
    $connection->close();
    }
    }
    });

    // 開啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符
    $inner_text_worker = new Worker('Text://0.0.0.0:5332');
    $inner_text_worker->onMessage = function ($connection, $buffer) use ($tcp_worker) {
    // $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁面推送數(shù)據(jù)
    $data = json_decode($buffer, true);
    $uid = $data['padCode'];
    // 通過workerman,向uid的頁面推送數(shù)據(jù)
    $ret = Relay::sendMessageByUid($tcp_worker,$uid, json_encode($data['param']));
    dump($data);
    return $connection->send(json_encode(['padCode'=>$uid,'status'=> (bool)$ret]));
    };

    $inner_text_worker->listen();
    };

    Worker::runAll();

報(bào)錯(cuò)信息

stream_socket_server(): unable to connect to tcp://0.0.0.0:5332 (Address already in use)
1591 2 0
2個(gè)回答

fyang

已解決

$tcp_worker->count = 4 的問題,每個(gè)進(jìn)程就是一個(gè)端口啟動(dòng),4個(gè)就是啟動(dòng)了4次端口,所以提示占用

  • 暫無評論
walkor 打賞

進(jìn)程數(shù)設(shè)置為1或者設(shè)置$inner_text_worker->resuePort = true; ,reusePort作用參見手冊 http://m.wtbis.cn/doc/workerman/worker/reuse-port.html

另外如果開啟多進(jìn)程,進(jìn)程間是完全隔離的,比如客戶端1連接了A進(jìn)程,客戶端2連接了B進(jìn)程,A進(jìn)程沒辦法直接獲取B進(jìn)程的連接數(shù)據(jù),也就是客戶端1和客戶端2之間沒辦法直接通訊。要通訊的話需要做進(jìn)程間通訊,例如用channel組件等方案。如果沒有多進(jìn)程編程經(jīng)驗(yàn),建議直接開1個(gè)進(jìn)程,或者用gatewayWorker。
如果workerman只做通訊,沒有數(shù)據(jù)庫等阻塞訪問,開一個(gè)進(jìn)程就可以支持幾萬連接,一般業(yè)務(wù)夠用了。

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