为什么sockJS会在给定的websocket url路径中添加'/ info'

时间:2016-01-28 02:52:33

标签: websocket spring-websocket sockjs java-websocket

我想打开一个带有“webapp / socket.do”路径的websocket端口。当我使用SockJS并尝试通过代码启动呼叫时

    var socket = new SockJS('/webapp/socket.do');
    stompClient = Stomp.over(socket);

    stompClient.connect({}, ...

默认情况下,SockJS会在给定路径的末尾添加“/ info”。我想知道为什么?这可以改变或预防吗?

当它与Spring MVC一起使用并且具有到< url-pattern >*.do</url-pattern>之类的DispatcherServlet的url模式映射时,这将返回404错误。由于sockJS将“/ info”字符串添加到给定的URL,它被阻止。

Spring web.xml servlet映射代码:

<servlet-mapping>
    <servlet-name>dispatch-servlet</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

有没有人知道sockJS在那里尝试了什么?为什么?

1 个答案:

答案 0 :(得分:5)

这是SockJS协议的一部分,也是强制性的。 此端点由服务器实现,并传达服务器功能,例如支持的协议。请参阅relevant part of the SockJS protocol

在这种情况下,我猜你需要调整你的servlet映射不仅适用于这个端点,还需要调整其他可能出现的请求:HTTP UPGRADE对websocket的请求,以及HTTP-based transports supported by SockJS的所有其他请求。