$httpserver = new Worker('websocket://0.0.0.0:1000');
$httpserver->onMessage = function($conhttp,$msg)use($connection)
{
print_r($msg);
};
$httpserver->onWorkerStart = function($conhttp)
{
$connection = new AsyncTcpConnection('tcp://10.10.10.200:8021');
$connection->onMessage = function($connection,$buffer)use($conhttp)
{
//如何在此處獲取到$msg的值
};
};
首先你這也不是父子進(jìn)程之間的通信,onXXX回調(diào)方法里的都是子進(jìn)程邏輯。
AsyncTcpConnection(8021) 啥意思? 應(yīng)該是AsyncTcpConnection(1000),參考代碼【不過(guò)只適用于單進(jìn)程模型】:
<?php
use Workerman\Worker;
use Workerman\Lib\Timer;
use Workerman\Connection\AsyncTcpConnection;
require_once dirname(__DIR__) . '/Workerman/Autoloader.php';
$worker = new Worker('text://0.0.0.0:3000');
$worker->count = 1;
$worker->onWorkerStart = function($worker) {
$connection = new AsyncTcpConnection('text://127.0.0.1:3000');
$connection->connect();
$connection->onMessage = function($connection, $msg){
pprint($msg);
};
};
$worker->onMessage = function($connection, $msg){
foreach($connection->worker->connections as $one_connection){
$one_connection->send($msg);
}
};
Worker::runAll();
對(duì)于多進(jìn)程之間的通信,有很多方法:
(1)使用官方提供的GlobalData組件 或者 Channle組件。
(2)使用 redis、memcache 或者 mysql 等。
(3)使用類(lèi)似官方的GatewayWorker通信模型,即:注冊(cè)一個(gè)全局register進(jìn)程,$httpserver進(jìn)程onWorkerStart時(shí)連接register進(jìn)程,這樣當(dāng)不同進(jìn)程的客戶(hù)端通信時(shí),交由register進(jìn)程來(lái)轉(zhuǎn)發(fā)數(shù)據(jù)。