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

router

說(shuō)明:

callback Gateway::$router

設(shè)置Gateway到BusinessWorker路由規(guī)則。默認(rèn)規(guī)則是Gateway隨機(jī)選擇一個(gè)BusinessWorker進(jìn)程,然后把當(dāng)前client_id與這個(gè)BusinessWorker進(jìn)程綁定,以后這個(gè)client_id的所有數(shù)據(jù)(onConnect/onMessage/onClose事件)都交給這個(gè)綁定的BusinessWorker進(jìn)程處理。

期待該回調(diào)函數(shù)從所有到BusinessWorker進(jìn)程的連接對(duì)象中選擇一個(gè)并返回。

回調(diào)函數(shù)的參數(shù)

  • $worker_connnections

是一個(gè)包含了所有到BusinessWorker進(jìn)程的連接對(duì)象數(shù)組。數(shù)組的下標(biāo)是格式為ip:worker_name:worker_id的字符串。其中ip為worker所在服務(wù)器的ip,worker_name為$businessworker->name的值(name屬性參見(jiàn)workerman手冊(cè)),worker_id為自動(dòng)分配的進(jìn)程id編號(hào)(進(jìn)程編號(hào)參見(jiàn)workerman手冊(cè))。這樣通過(guò)下標(biāo)就可以知道連接對(duì)應(yīng)的worker在哪個(gè)服務(wù)器,屬于哪組worker,進(jìn)程編號(hào)是多少,可以方便的將消息路由給期望的服務(wù)器上的進(jìn)程中去處理。

如果打印var_dump($worker_connnections),則是類似這樣的數(shù)據(jù)。

array(4) {
  ["127.0.0.1:ChatBusinessWorker:0"]=>object(Workerman\Connection\TcpConnection)...,
  ["127.0.0.1:ChatBusinessWorker:1"]=>object(Workerman\Connection\TcpConnection)...,
  ["127.0.0.1:ChatBusinessWorker:2"]=>object(Workerman\Connection\TcpConnection)...,
  ["127.0.0.1:ChatBusinessWorker:3"]=>object(Workerman\Connection\TcpConnection)...,
}

(注意:GatewayWorker2.0.4之前版本數(shù)組下標(biāo)為ip:port,并非ip:worker_name:worker_id)

  • $client_connection

客戶端連接對(duì)象,可以通過(guò)此對(duì)象獲得客戶端ip端口等信息,也可以向其添加一些動(dòng)態(tài)屬性用來(lái)保存當(dāng)前連接的相關(guān)信息。

  • $cmd

當(dāng)前什么類型的消息,是個(gè)數(shù)字,分別可能為

CMD_ON_CONNECTION,即連接事件

CMD_ON_MESSAGE,即消息事件

CMD_ON_CLOSE,即客戶端關(guān)閉事件

  • $buffer

客戶端發(fā)來(lái)的數(shù)據(jù)。注意只有當(dāng) $cmdCMD_ON_MESSAGE時(shí) $buffer才有值

返回值

返回 $worker_connnections 中的一個(gè)連接對(duì)象。

范例 1 隨機(jī)路由

use \GatewayWorker\Gateway;
$gateway = new Gateway("Websocket://0.0.0.0:8585");
// ===隨機(jī)路由開(kāi)始===
$gateway->router = function($worker_connections, $client_connection, $cmd, $buffer)
{
    return $worker_connections[array_rand($worker_connections)];
};
// ===隨機(jī)路由結(jié)束===

$gateway->name = ...
...省略...

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

范例 2 隨機(jī)綁定

use \GatewayWorker\Gateway;
$gateway = new Gateway("Websocket://0.0.0.0:8585");

// ==綁定==
$gateway->router = function($worker_connections, $client_connection, $cmd, $buffer)
{
    // 臨時(shí)給客戶端連接設(shè)置一個(gè)businessworker_address屬性,用來(lái)存儲(chǔ)該連接被綁定的worker進(jìn)程下標(biāo)
    if (!isset($client_connection->businessworker_address) || !isset($worker_connections[$client_connection->businessworker_address])) {
            $client_connection->businessworker_address = array_rand($worker_connections);
        }
        return $worker_connections[$client_connection->businessworker_address];
};
// ==綁定==

$gateway->name = ...
...省略...

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}
編輯于2024-03-13 17:37:33 完善本頁(yè) +發(fā)起討論
贊助商