为什么SockJS会在给定的WebSocket URL路径中添加'/info'呢?
为什么SockJS会在给定的WebSocket URL路径中添加'/info'呢?
我想要打开一个带有“webapp/socket.do”路径的WebSocket端口。当我使用SockJS并尝试通过以下代码发起调用时:\n
var socket = new SockJS('/webapp/socket.do'); stompClient = Stomp.over(socket); stompClient.connect({}, ...
\nSockJS默认会在给定路径的末尾添加“/info”。我想知道为什么会这样?是否可以更改或阻止这个行为?\n当在使用Spring MVC时,将url模式映射到DispatcherServlet,如< url-pattern >*.do
,这将返回404错误。这是因为SockJS向给定的url添加了“/info”字符串而被阻止。\nSpring web.xml的servlet映射代码如下:\n
dispatch-servlet *.do
\n是否有人知道SockJS在尝试什么以及为什么这样做?
SockJS为了实现一些功能需求,需要在给定的WebSocket URL路径中添加'/info'。这是SockJS协议的一部分,是必需的。服务器实现了这个端点,并且通过该端点与客户端进行通信,包括传递服务器的能力,比如支持的协议。
如果需要适应这种情况,不仅需要为该端点调整Servlet映射,还需要为其他可能出现的请求进行适配:WebSocket的HTTP UPGRADE请求,以及SockJS支持的其他基于HTTP的传输方式的请求。
具体的解决方法可以参考SockJS协议的相关部分,以及SockJS客户端所支持的浏览器传输方式。
代码示例:
// Servlet映射配置 @WebServlet("/info/*") public class SockJsServlet extends HttpServlet { // 处理/info请求的逻辑 // ... } // 处理WebSocket请求的逻辑 // ...
以上是关于为什么SockJS在给定的WebSocket URL路径中添加'/info'的原因以及解决方法的整理。这样的设计是为了实现SockJS协议的要求,并且确保服务器和客户端能够正确地进行通信。