当前位置: 首页 > 知识库问答 >
问题:

在套接字上跺脚使用ockjs不能与Spring 4 WebSocket连接

傅正阳
2023-03-14

尝试使用Spring 4 WebSocket与STOMP通过使用Sockjs套接字。我面临一个问题。

我的配置:

websocket.xml-Spring上下文的一部分

<websocket:message-broker application-destination-prefix="/app">  
    <websocket:stomp-endpoint path="/ws">                         
        <websocket:sockjs/>                                       
    </websocket:stomp-endpoint>                                   
    <websocket:simple-broker prefix="/topic"/>                    
</websocket:message-broker>       

控制器代码:

@MessageMapping("/ws")
@SendTo("/topic/ws")
public AjaxResponse hello() throws Exception {
    AjaxResponse ajaxResponse = new AjaxResponse();
    ajaxResponse.setSuccess(true);
    ajaxResponse.addSuccessMessage("WEB SOCKET!!! HELL YEAH!");
    return ajaxResponse;
}

客户端:

var socket = new SockJS("<c:url value='/ws'/>");               
var stompClient = Stomp.over(socket);                             
stompClient.connect({}, function(frame) {                         
    alert('Connected: ' + frame);                                 
    stompClient.send("/app/ws", {}, {});                       
    stompClient.subscribe('/topic/ws', function(response){ 
        alert(response.success);                                  
    });                                                           
});                                                               

输出:

Opening Web Socket... stomp.js:130
GET http://localhost:8080/ws/info 404 (Not Found) sockjs-0.3.js:807
Whoops! Lost connection to undefined stomp.js:130

我做错了什么?

我在谷歌(TickerStocks或类似的东西,问候应用程序(Spring的例子))中找到了一些例子,所有这些都给了我同样的错误。我尝试使用WebSocket进行握手(不使用sockjs)-结果相同。

补充资料:

方法publicAjaxResponse hello() 放置在根上下文“/”上的IndexController中。因此我可以提供完整路径:http://localhost:8080/ws。部署测试过的tomcat7和tomcat8。


共有3个答案

葛浩阔
2023-03-14

例如,如果我想请求/ws,我应该创建SockJS与路径/服务器/app/ws,你也可以代码与var套接字=新的SockJS("

其次,您必须将路径“/app/*”添加到org。springframework。网状物servlet。DispatcherServlet,以避免web中定义的拦截器截获前缀为“/app”的路径。xml。

平庆
2023-03-14

我认为你的问题可能与这一问题相同,其公认的答案也适用。

简而言之:检查如何映射DispatcherServlet。要使endpointURL为http://localhost:8080/ws,DispatcherServlet和应用程序上下文根应设置为/。

在你的网站上应该是这样的。xml

<servlet>
  <servlet-name>WebSocketDispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>WebSocketDispatcher</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

这或您需要在endpointURL中包含上下文根和调度程序映射:

http://<server>:<port>/<context-root>/<dispatcher-mapping>/ws

希望能对你有所帮助。

当做

海伦诺

赏弘
2023-03-14

我遵循Boris The Spider的建议,开始使用Java配置(AppConfig和WebInit文件)而不是XML配置文件。当我完成迁移-我尝试webSocket-和它的作品!我认为主要问题在于WebSocket的XML配置。

 类似资料:
  • 我是Heroku的新手,我正在尝试部署使用socket.io侦听的NodeJS应用程序。我能够部署到本地和它的工作罚款。但是当在Heroku中运行相同的内容时,它没有响应。 在Heroku中有没有需要为套接字io指定的特定端口?我不能使用process.env.port,因为我正在将其用于app server端口。 有什么解决这个问题的想法吗?或者我们需要启用一些配置来使用套接字IO吗? 我想我们

  • 问题内容: 我正在使用OpenShift和WildFly 8.2.1 final来实现新的HTML5 websocket。我使用了本教程来设置这个项目。 每当我打开MyTest.html时,这就是JavaScript记录的内容: 服务器连接,然后立即断开连接。为什么?我究竟做错了什么?有什么我想念的吗? 这是模式代码-> serverendpoint.java MyTest.html: 和pom.

  • 在一个简单的客户端-服务器TCP套接字中,当我试图在Android Studio中创建客户端套接字时,遇到了一个问题。导致错误的指令是<code>Sockets=new Socket(主机名,端口) 我使用的端口是 1993,我尝试了变量的一些值: 在每种情况下,应用程序都会因为这个错误而停止,下面的错误属于第一点,其他的得到类似的错误。 Eclipse中的相同指令工作,我在命令行上使用服务器“n

  • 我正在构建一个无状态Spring(4.2.4.RELEASE)解决方案,使用STOMP over Websockets和SockJS,以及使用JWT连接移动设备和全双工通信的Restendpoint。我使用Tomcat 8.0.33作为Web服务器,并使用html和sockjs javascript客户端进行测试。stomp协议使用http回退可以很好地工作,但我不能仅使用websocket协议。

  • 这很好,但没有SSL。 我已经使用OpenSSL为服务器和客户机生成了SSL证书,结果是: 服务器的证书(PEM格式) 客户端的证书(PEM格式) 服务器的私钥(PEM格式) 客户端的私钥(PEM格式) CA文件(PEM、CER和CRT格式) null 会出什么问题?

  • Nginx 1.1.4可用于与HTTP1的上游连接。1 keepalive指令,请参阅官方文档(它与keepalive客户端的连接不同)。所以独角兽的配置可以如下所示: HTTP连接需要这些标头:proxy_http_version和proxy_set_header。 所以问题是配置有效还是套接字连接本身是永久的?