如何向连接到Undertow Websocket服务器的所有客户端广播消息?

时间:2018-07-29 23:15:51

标签: java websocket undertow

这是我当前的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并手动发送给每个客户端的想法。当然,在某个地方我忽略了一种方法?

如果不是不可能的事情,我将感谢一些指导!

1 个答案:

答案 0 :(得分:1)

您可以通过获取与此运河的所有连接并发送消息来向通道上的所有客户端广播消息:

channel.getPeerConnections().forEach(connection -> {
    WebSockets.sendText(messageData, connection, null);
});