HttpWorker 收到数据,如何广播给 WebSocketClient?

目前用 Workerman 试着写一个这样的应用:

Screen_Shot_2015-06-19_at_3.41_.40_PM_.png


两个 Worker 与各自的 client 通信已经可以了,但是 HttpWorker 与 WsWorker 如何通信?
已邀请:

walkor

赞同来自: ws666

如果ws server是gatewayWorker开发的,可以在http Worker中用GatewayClient向ws的客户端发送数据
手册 :http://gatewayworker-doc.workerman.net/advanced/push.html

如果是基于Worker开发
最直接的方法是在HttpWorker中模拟客户端以websocket协议与Ws Worker通讯,websocket客户端在workerman群共享中有,或者在github上找一个

如果Ws Worker 是单进程的,也可以增加一个Text协议端口的监听,然后httpWorker以Text协议发送数据到Ws Worker
增加一个协议端口监听类似下面代码

$ws_worker = new Worker('Websocket://0.0.0.0:8080');
$ws_worker->onWorkerStart = function($ws_worker)
{
// 增加一个Text协议端口的监听
$text_worker = new Worker('Text://0.0.0.0:9090');
$text_worker->onMessage = function($connection, $data)
{
// 这里处理Http Worker 上发来的数据 $data
// 省略....
};
// 给ws_worker添加一个属性保存text_worker
$ws_worker->textWorker = $text_worker;
// 执行监听
$text_worker->listen();
};

Http Worker 中可以这样用Text协议与Ws Worker通讯

$client = stream_socket_client("tcp://$ip:9090");
// text 协议为字符串末尾加一个换行符 \n
fwrite($client, $data."\n");


还有其它方法,比如单独建立一个中转Worker进程,Http Worker 与 Ws Worker在onWorkerStart时与这个中转Worker建立连接,然后二者就可以通过这个中转Worker通讯了

要回复问题请先登录注册