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

如何將下列紅框部分改成不向所有設(shè)備發(fā)送,而是向發(fā)送信息的設(shè)備發(fā)送?

s898225836

如何將下列紅框部分改成不向所有設(shè)備發(fā)送,而是向發(fā)送信息的設(shè)備發(fā)送?

$ws_worker = new Worker('Websocket://0.0.0.0:5656');
    // 這里只能寫1
    $ws_worker->count = 1;
    // websocket server 啟動后在當(dāng)前進(jìn)程增加一個socket監(jiān)聽
    $ws_worker->onWorkerStart = function($ws_worker)
    {
        // 增加一個Socket端口的監(jiān)聽設(shè)備發(fā)來的數(shù)據(jù)
        $socket_worker = new Worker('tcp://0.0.0.0:5555');
        // 當(dāng)設(shè)備發(fā)來數(shù)據(jù)時如何處理
        $socket_worker->onMessage = function($connection, $data)
        {
            // 這里處理設(shè)備發(fā)來的數(shù)據(jù) $data
            // 比如像這樣給所有的WebSocket連接轉(zhuǎn)發(fā)數(shù)據(jù)
_**         global $ws_worker;
            foreach($ws_worker->connections as $ws_con)
            {
               $ws_con->send($data);
            }**_
        };
        // 給ws_worker添加一個屬性保存socket_worker,方便獲取
        $ws_worker->socketWorker = $socket_worker;
        // 執(zhí)行監(jiān)聽
        $socket_worker->listen();
    };
2458 1 0
1個回答

phpcreeper

關(guān)鍵是要建立抽象的uid 與 設(shè)備連接的映射關(guān)系,參考代碼如下:

$worker = new Worker('text://0.0.0.0:3333');
$worker->count = 1;
$worker->onWorkerStart = function($worker){
    //開啟一個內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù).
    $inner_text_worker = new Worker('text://0.0.0.0:4444');
    $inner_text_worker->onMessage = function($connection, $buffer)use ($worker) {
        global $worker;
        //$data數(shù)組里面有uid, 這樣便于向特定uid推送數(shù)據(jù): {"uid":2, "msg":"blogdaren"}
        $data = json_decode($buffer, true);
        $uid = $data;
        $msg = $data;

        //向特定uid推送數(shù)據(jù)
        $result = pushMessageByUid($uid, $msg);

        //返回推送結(jié)果
        $connection->send(true === $result ? 'success' : 'failed');
    };

    $inner_text_worker->listen();
};

//新增加一個屬性,用來保存uid到connection的映射
$worker->uidConnections = array();

//最好通過onMessage回調(diào)來生產(chǎn)uid, 為了演示用onConnect回調(diào).
$worker->onConnect = function($connection)use($worker) {
    //判斷當(dāng)前客戶端是否已經(jīng)驗證
    if(!isset($connection->uid))
    {
        //為了演示, 簡化將 $connection->id 用作uid
        $connection->uid = $connection->id;

        //保存uid到connection的映射,這樣可以方便的通過uid查找connection, 實現(xiàn)針對特定uid推送數(shù)據(jù)
        $worker->uidConnections = $connection;

        return false;
    }
};

//當(dāng)客戶端連接斷開時
$worker->onClose = function($connection)use($worker) {
    if(isset($connection->uid)) unset($worker->uidConnections);
};

//向特定uid推送數(shù)據(jù)
function pushMessageByUid($uid, $message)
{
    global $worker;

    if(isset($worker->uidConnections))
    {
        $connection = $worker->uidConnections;
        $connection->send($message);
        return true;
    }

    return false;
}

//運行所有的worker
Worker::runAll(); 
  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??