如何向连接到 Undertow websocket 服务器的所有客户端广播消息?
How can I broadcast a message to all clients connected to an Undertow websocket server?
这是我当前的 Undertow websocket 服务器设置:
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path()
.addPrefixPath("/", websocket((exchange, channel) -> {
channel.getReceiveSetter().set(new AbstractReceiveListener() {
@Override
protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
final String messageData = message.getData();
for (WebSocketChannel session : channel.getPeerConnections()) {
WebSockets.sendText(messageData, session, null);
}
}
});
channel.resumeReceives();
}))).build();
这是从他们的一个演示文件中复制的。我相信 onFullTextMessage
在这里向所有客户端广播它收到的任何消息。
我希望能够按需触发此行为。因此,我希望能够任意 server.send()
并向所有连接的客户端发送消息,而不是必须接收消息并使用事件处理程序发送更多消息。
我环顾四周,没有发现任何似乎能够实现这一目标的东西。我不喜欢跟踪所有 WebSocketChannels
并手动发送给每个客户的想法。当然,我忽略了某个地方的方法?
如果这不是不可能的事情,我将不胜感激!
您可以通过获取到该通道的所有连接并发送消息来向通道上的所有客户端广播消息:
channel.getPeerConnections().forEach(connection -> {
WebSockets.sendText(messageData, connection, null);
});
这是我当前的 Undertow websocket 服务器设置:
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(path()
.addPrefixPath("/", websocket((exchange, channel) -> {
channel.getReceiveSetter().set(new AbstractReceiveListener() {
@Override
protected void onFullTextMessage(WebSocketChannel channel, BufferedTextMessage message) {
final String messageData = message.getData();
for (WebSocketChannel session : channel.getPeerConnections()) {
WebSockets.sendText(messageData, session, null);
}
}
});
channel.resumeReceives();
}))).build();
这是从他们的一个演示文件中复制的。我相信 onFullTextMessage
在这里向所有客户端广播它收到的任何消息。
我希望能够按需触发此行为。因此,我希望能够任意 server.send()
并向所有连接的客户端发送消息,而不是必须接收消息并使用事件处理程序发送更多消息。
我环顾四周,没有发现任何似乎能够实现这一目标的东西。我不喜欢跟踪所有 WebSocketChannels
并手动发送给每个客户的想法。当然,我忽略了某个地方的方法?
如果这不是不可能的事情,我将不胜感激!
您可以通过获取到该通道的所有连接并发送消息来向通道上的所有客户端广播消息:
channel.getPeerConnections().forEach(connection -> {
WebSockets.sendText(messageData, connection, null);
});