gatewayworker分布式,理论上是不是服务端发消息不管连的哪台都可以收到?

新手上路,请多包涵

gatewayworker做的聊天室,多机进行分布式,如a,b两台机器,统一由a机监控,b机的注册地址指向a机,程序都启动及执行都正常,但信息不互通。
示例:
a1客户端ws连接向a机
b1客户端ws连接向b机

a,b任意一台服务器向所有client_id发送消息都只能向连接自己的机器发送成功!

是否我理解有误,本身就是不支持的,如果需要支持要怎么处理?

阅读 2.5k
1 个回答

应该是理解有误
我开了两个Gateway
$gateway = new Gateway("Websocket://0.0.0.0:8282");

$gateway = new Gateway("Websocket://0.0.0.0:8283");
用两个页面App1,App2 去连接websocket

var ws = new WebSocket("ws://127.0.0.1:8282"); 
ws.onopen = function(evt) {
    console.log("App1 Connection open ...");
    ws.send("This is App1");
};
ws.onmessage = function(evt) {
    console.log("App1 Received Message: " + evt.data);
};

Event.php 中最简单逻辑

    public static function onConnect($client_id)
    {
        // 向当前client_id发送数据 
        Gateway::sendToClient($client_id, "Hello $client_id\r\n");
        // 向所有人发送
        Gateway::sendToAll("$client_id login\r\n");
    }
   public static function onMessage($client_id, $message)
   {
        // 向所有人发送 
        Gateway::sendToAll("$client_id said $message\r\n");
   }

在APP1连接服务器的时候,App2可以收到服务器群发的消息,App2得到的输出内容如下:

App2 Received Message: 7f0000010b5400000006 login

App2 Received Message: 7f0000010b5400000006 said This is App1

======使用两台机器也是一样,应该是那几个start文件配置问题
主机与虚拟机两台机器测试

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题