Как узнать, когда сервер Stomp отключился от клиента Stomp.JS

Я отправляю топовое сообщение через клиент Sock.JS. Когда я отключаю сервер, я бы хотел, чтобы на клиенте отображалось предупреждающее сообщение. Для этого я реализовал сердцебиение на стороне сервера.

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 

Как я могу перехватить это сообщение об ошибке?


person Jackie    schedule 01.07.2014    source источник


Ответы (2)


Как указано в muttonUp stomp.js из https://github.com/jmesnil/stomp-websocket/ перезапишет обработчик onclose. С другой стороны, он предоставляет возможность передать обратный вызов ошибки при подключении:

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

Поскольку вы получите несколько видов ошибок, доставленных в ваш обратный вызов, вы должны проверить сообщение, что это действительно было «Упс! [...]», что указывает на потерю соединения.

person Christoph    schedule 26.06.2015
comment
этот метод также не вызывается, когда сетевое подключение к серверу отключено. - person Bilal Ahmed Yaseen; 27.02.2018
comment
@BilalAhmedYaseen у меня работает, когда сеть убивается после того, как соединение уже было установлено. - person Michael; 02.09.2020

К сожалению, только что понял, я удалю немного, если это не поможет другим. Мне нужно было использовать клиент SockJS вместо Stomp...

var socket = new SockJS('/hello');
...
socket.onclose = function() {
    console.log('close');
    stompClient.disconnect();
    setConnected();
};
person Jackie    schedule 01.07.2014
comment
Если вы используете github.com/jmesnil/stomp-websocket, это не сработает. , так как Stomp.JS перезаписывает функцию onclose своей собственной. но, возможно, вы используете другую библиотеку Stomp? - person muttonUp; 05.02.2015
comment
Указание для будущего читателя: обратный вызов onclose принимает функцию с одним параметром object, который предоставляет примечательные значения, связанные с отключением, такие как код состояния закрытия определено в документации по протоколу WebSocket. - person Gideon; 01.11.2020