public static function onMessage($client_id, $message)
{
$message = json_decode($message, true);
Gateway::sendToGroup($message['group_id'], json_encode([
'type' => 'test',
'group' => Gateway::getClientSessionsByGroup($message['group_id'])
]));
}
ws.send('{"type":"ready", "group_id": "{{ $race->id }}"}');
ws.onmessage = function(e){
var data = eval("("+e.data+")");
var type = data.type || '';
console.log(data);
}
第一个用户进入,发送ready,服务端响应信息,客户端监听,收到服务端响应的 1 条消息;
第二个用户进入,发送ready,服务端响应信息,客户端监听,收到服务端响应的 2 条消息;
第三个用户进入,发送ready,服务端响应信息,客户端监听,收到服务端响应的 3 条消息;
...
第N个用户进入,发送ready,服务端响应信息,客户端监听,收到服务端响应的 N 条消息;
不管几个客户端加入group,服务端sendToGroup后,每个客户端只收一次服务端消息。
不知道哪里出问题了,请大神指点。
看下是不是一个页面建立了多个websocket连接
ws = new WebSocket("ws://race.test:2346");
ws.onmessage = function(e){
......
}
确认只建立了一条连接
截图下完整的测试过程吧
截图的是客户端一,是当第二个客户端加入后,服务端通知joined,然后客户端二向服务端发送一条消息后,客户端一的截图。
感觉你的业务代码没发完整,发下完整的服务端代码和客户端代码。
他这个应该是服务端通知joined这步通知给了所有的客户端,然后所有的客户端向服务端发送了一条消息,然后单个客户端就收到N条消息了。所以他的业务逻辑可能有问题。