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");
}
我想创建一个 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");
}