Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Websocket处理程序未向所有客户端发布消息_Java_Spring_Websocket_Spring Websocket - Fatal编程技术网

Java Spring Websocket处理程序未向所有客户端发布消息

Java Spring Websocket处理程序未向所有客户端发布消息,java,spring,websocket,spring-websocket,Java,Spring,Websocket,Spring Websocket,我有一个Spring Websocket服务器,非常简单: @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) { webSocket

我有一个Spring Websocket服务器,非常简单:

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
        webSocketHandlerRegistry.addHandler(new WebsocketHandler(), "/socket").setAllowedOrigins("*");
    }
    @Bean
    public ServletServerContainerFactoryBean createWebSocketContainer() {
        ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
        container.setMaxBinaryMessageBufferSize(1024000);
        container.setMaxTextMessageBufferSize(1024000);
        return container;
    }

}

当我打开客户端时,它只是一个带有SockJS库的简单HTML,客户端可以从服务器发送接收消息,但是如果我用类似的客户端打开一个新选项卡,它将无法接收其他客户端发布的消息


这是因为session.sendMessage(message)引起的吗?当一个客户机发布消息时,所有其他客户机都可以接收到消息的配置应该是什么?

如果要将数据发送给其他客户机,则需要跟踪会话。正如您在此时的文档中所看到的,处理程序还有两个函数用于连接打开后和连接关闭后。这对你有什么帮助? 您可以保留一个同步的集合,如
CopyOnWriteList
,也可以使用
集合。同步的
,当客户端连接(
afterConnectionEstablished(WebSocketSession会话)
)时,将此客户端添加到此集合中,或者当客户端断开连接(
afterConnectionClosed)时(WebSocketSession session,CloseStatus CloseStatus)
),您可以从集合中删除该会话。当您要向每个客户端发送消息时,请循环此集合,并使用该会话发送对象。如果您仍然感到困惑,我可以提供一个代码示例

public class WebsocketHandler extends AbstractWebSocketHandler {
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws IOException {
        System.out.println(message.getPayload()+"\n");
        session.sendMessage(message);
    }

    @Override
    protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws IOException {
        System.out.println("New Binary Message Received");
        session.sendMessage(message);
    }
}