Java 具有 Spring 集成 (DI) 且没有 'CONNECT' 消息的 WebSocket 客户端

Java WebSocket client with Spring integration (DI) and no 'CONNECT' message

我想创建一个 java 8 WebSocket 客户端应用程序,它与 Spring 集成并且不发送初始连接消息或可以自定义消息。

我已经用 tyrus 1.17 试过了,但是 ClientManager.createClient() 创建了我注释的 类 @ClientEndpoint 的新实例,我发现无法使用另一个实例 Spring 已创建。

我也尝试过使用 spring-websocket 5.2.9.RELEASE 和 spring-stomp 5.3.2.RELEASE,但它会发送预定义的 'CONNECT' 消息破坏了我与服务器的集成,因为它不理解它。

如果有人可以就我以前从未见过的 google 中的某些示例或支持所有这些示例的 implementations/examples 提供任何指导,那就太好了。

jetty-websocket-client-api 两者都支持。

<dependency>
    <groupId>org.eclipse.jetty.websocket</groupId>
    <artifactId>websocket-client</artifactId>
    <version>9.4.32.v20200930</version>
</dependency>

向 spring bean 添加 @org.eclipse.jetty.websocket.api.annotations.WebSocket 注释,然后创建四个带注释的方法来处理不同的事件:

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;

@OnWebSocketConnect public void onConnect(Session session) { }
@OnWebSocketMessage public void onMessage(String text) { }
@OnWebSocketClose public void onClose(int statusCode, String reason) { }
@OnWebSocketError public void onError(Throwable cause) { }

然后连接 WebSocket 客户端并连接

import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;

@Override
public void afterSingletonsInstantiated() {
    Object mySpringBeanForWebsocket = this;
    WebSocketClient client = new WebSocketClient();
    ClientUpgradeRequest request = new ClientUpgradeRequest();
    client.start();
    client.connect(mySpringBeanForWebsocket, new URI("wss://my.secure.websocket.server.address.com"), request);
}

然后一旦api调用onConnect方法就可以发送自定义初始消息

@OnWebSocketConnect
public void onConnect(Session session) {
    session.getRemote().sendString("Here comes my first message");
}