Spring中的其他WebsocketClient实现是什么?

时间:2015-08-14 10:14:38

标签: java spring jetty spring-websocket

我有一个连接到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运行时中的StandardWebSocketClient
  • 使用Jetty 9+本机WebSocket API的JettyWebSocketClient
  • Spring的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。谢谢你们。

1 个答案:

答案 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客户端实现都可以正常工作。