我有一个连接到websocket端点的Spring应用程序。为此,我使用Spring StandardWebSocketClient类。
WebSocketClient transport = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
String url = "ws://localhost:8080/asynccontrol";
StompSessionHandler handler = new MySessionHandler();
stompClient.connect(url, handler);
这在Jetty中运行没有任何问题。现在我必须在Websphere JRE7环境中部署此应用程序。由于这个WAS版本不支持JSR-356,我必须使用另一个实现。从这个link WebsocketClient可以是类型:
第一选择不可用(没有JSR-356运行时),第二选择不可用(需要JRE8,得到不支持的major.minor版本52),这第三个选择是什么? Spring的WebSocketClient的其他实现是什么?
是否可以在JRE7中重新编译org.eclipse.jetty.websocketclient?
解决方案
我不能使用jetty9.2,因为它与JettyWebSocketClient适配器不兼容。但是我可以使用带有StandardWebSocketClient的无适配器的api。
我安装了tomcat8,它也适用于StandardWebSocketClient。在tomcat7中,我仍然遇到不兼容的WsContainerProvider子类型错误,可能是我特定的tomcat版本的错误。对于备份计划,我还开发了TyrusWebSocketClient。谢谢你们。
答案 0 :(得分:1)
您可以使用tyrus-standalone client。
如果您使用的是Maven,请添加此依赖项:
<dependency>
<groupId>org.glassfish.tyrus.bundles</groupId>
<artifactId>tyrus-standalone-client</artifactId>
<version>1.9</version>
</dependency>
或
<dependency>
<groupId>org.glassfish.tyrus.bundles</groupId>
<artifactId>websocket-ri-bundle</artifactId>
<version>1.2.1</version>
</dependency>
我使用了websocket-ri-bundle
(第二个依赖),但是这两个中的任何一个都能正常工作。
修改强>
如果您看到StandardWebsocketClient
类
public StandardWebSocketClient() {
this.webSocketContainer = ContainerProvider.getWebSocketContainer();
}
Spring尝试从META-INF/services/javax.websocket.ContainerProvider
客户端实现文件中识别Container提供程序。因此任何正确指出此文件的websocket客户端实现都可以正常工作。