【发布时间】:2017-10-13 09:12:59
【问题描述】:
我们正在尝试使用 Spring Framework WebSocket support 公开 sockjs 端点。
这是 Jersey 管理路由的服务器端的配置:
@Configuration
@EnableWebSocket
public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/sockjs").withSockJS()
.setStreamBytesLimit(512 * 1024)
.setHttpMessageCacheSize(1000)
.setDisconnectDelay(30 * 1000);
}
}
问题是我们无法访问/sockjs,客户端代码是:
List<Transport> transports = new ArrayList<>(2);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());
SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.doHandshake(new MyHandler(), "ws://localhost:8080/sockjs");
(代码来自springwebsockets tutorial)
即使/sockjs 和/root/api/server/sockjs 都无法访问,同一包中的其他资源也会配置在root/api/server 下。
【问题讨论】:
-
泽西岛的 URL 映射是什么?
-
在
web.xml中我们配置了这个:<servlet-mapping><servlet-name>Jersey Web Application</servlet-name><url-pattern>/api/*</url-pattern></servlet-mapping>我们也有/root前缀作为tomcat webapp配置的一部分同一个包上面的资源定义了/server路径 -
如果禁用泽西岛,它会起作用吗?
-
不,这让我们了解到 spring-web 没有正确初始化以注册此端点。感谢您的帮助!
-
@Noam 你能分享对你有帮助的解决方案吗?我也面临同样的问题。
标签: java spring websocket jersey sockjs