首先你这也不是父子进程之间的通信,onXXX回调方法里的都是子进程逻辑。
AsyncTcpConnection(8021) 啥意思? 应该是AsyncTcpConnection(1000),参考代码【不过只适用于单进程模型】:
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();
对于多进程之间的通信,有很多方法:
(1)使用官方提供的GlobalData组件 或者 Channle组件。
(2)使用 redis、memcache 或者 mysql 等。
(3)使用类似官方的GatewayWorker通信模型,即:注册一个全局register进程,$httpserver进程onWorkerStart时连接register进程,这样当不同进程的客户端通信时,交由register进程来转发数据。