目前用 Workerman 试着写一个这样的应用:
[attach]91[/attach]
两个 Worker 与各自的 client 通信已经可以了,但是 HttpWorker 与 WsWorker 如何通信?
如果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通讯了
如果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
增加一个协议端口监听类似下面代码
Http Worker 中可以这样用Text协议与Ws Worker通讯
还有其它方法,比如单独建立一个中转Worker进程,Http Worker 与 Ws Worker在onWorkerStart时与这个中转Worker建立连接,然后二者就可以通过这个中转Worker通讯了