编写客户端以在 spring 启动时连接到 websocket

Writing a client to connect to websocket in spring boot

我正在尝试使用 spring 启动来制作基于 websocketed 的 server/client 应用程序。

服务器接受一个套接字连接,然后当它从客户端收到一条文本消息时,它将处理它,然后 return 一些数据。服务器有一个 websocket 处理程序,可以正确处理请求。

public class DataWebSocketHandler extends TextWebSocketHandler {

private static Logger logger = LoggerFactory.getLogger(DataWebSocketHandler.class);

private final DataService dataService;

@Autowired
public DataWebSocketHandler(DataService dataService) {
    this.dataService = dataService;
}

@Override
public void afterConnectionEstablished(WebSocketSession session) {
    logger.debug("Opened new session in instance " + this);
}

@Override
public void handleTextMessage(WebSocketSession session, TextMessage message)
        throws Exception {
    byte[] payload = this.dataService.getDataBytes(message.getPayload());
    session.sendMessage(new BinaryMessage(payload));
}

@Override
public void handleTransportError(WebSocketSession session, Throwable exception)
        throws Exception {
    session.close(CloseStatus.SERVER_ERROR);
}

}

并注册

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(dataWebSocketHandler(), "/data").withSockJS();
}

我的问题是,我不知道如何编写一个可以连接到服务器的客户端(假设我正确编写了服务器)以及扩展如何发送消息以及如何在客户端接收该数据。

我没找到这方面的例子,但是有很多地方写了一个 websocket 广播给所有订阅套接字的客户端,这是我不想要的。

服务器使用嵌入式 tomcat 服务器。

我相信这就是您要找的东西

https://github.com/spring-projects/spring-boot/tree/main/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/src/test/java/smoketest/websocket/jetty/echo

这是一个类似的服务器端代码..

https://github.com/spring-projects/spring-boot/blob/main/spring-boot-tests/spring-boot-smoke-tests/spring-boot-smoke-test-websocket-jetty/src/test/java/smoketest/websocket/jetty/SampleWebSocketsApplicationTests.java

这是客户端。使用 org.springframework.web.socket.client.standard.StandardWebSocketClient 和一些其他配置。

我相信你能想出剩下的;)

干杯