如何判断Stomp服务器与Stomp.JS客户端的断开连接?

18

我正在使用Sock.JS客户端发送一个stomp消息。当我断开与服务器的连接时,我希望在客户端上显示一个警告消息。为此,我已经实现了服务器端的心跳。

stompClient = Stomp.over(socket);
stompClient.heartbeat.outgoing = 20000;
stompClient.heartbeat.incoming = 20000;
stompClient.connect({}, function(frame) {
  ...
}

在Chrome开发者控制台中,我看到以下信息:

POST http://localhost:8080/hello/800/8n_btbxb/xhr_streaming net::ERR_CONNECTION_RESET sockjs-0.3.min.js:27
Whoops! Lost connection to undefined 

我该如何捕获这个错误信息?

2个回答

27

正如muttonUp所指出的,来自https://github.com/jmesnil/stomp-websocket/的stomp.js会覆盖onclose处理程序。另一方面,它提供了在连接时传递错误回调函数的选项:

stompClient.connect({}, function(frame) {
    ...
}, function(message) {
    // check message for disconnect
});

由于您将收到多种错误传递给回调函数,因此您必须检查它是否确实是指示连接丢失的“Whoops![...]”消息。


1
当服务器的网络连接不畅时,此方法也不会被调用。 - Bilal Ahmed Yaseen
@BilalAhmedYaseen 对我来说很管用,当连接已经建立后,网络被终止时。 - Michael

4

抱歉,我刚明白了,如果这对他人没有帮助,我会在稍后删除它。我需要使用SockJS客户端而不是Stomp客户端...

var socket = new SockJS('/hello');
...
socket.onclose = function() {
    console.log('close');
    stompClient.disconnect();
    setConnected();
};

2
如果您正在使用https://github.com/jmesnil/stomp-websocket/,那么这将无法工作,因为Stomp.JS会用自己的onclose函数覆盖它。但也许您使用的是不同的Stomp库? - muttonUp
1
提醒未来的读者:onclose 回调函数接受一个带有单个 object 参数的函数,该参数公开了与断开连接相关的值,例如在 WebSocket 协议文档中定义的关闭状态码 https://tools.ietf.org/html/rfc6455#section-7.4.1。 - Gideon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接