websocket heartbeat
npm install websocket-heartbeat-js---
Back-end websocket service is likely to happen error, when websocket disconnected that front-end not notice message received. So need to send ping message by timeout. Server return pong message to client when server received ping message. Because received pong message, client know connection normal. If client not received pong message, it is connection abnormal, client will reconnect.
In summary, for solve above two problems. Client should initiative send ping message for check connect status.
1.close websocket connection
If websocket need to disconnect, client must execute WebsocketHeartbeatJs.close(). If server wants to disconnect, it should send a close message to client. When client received close message that it to execute WebsocketHeartbeatJs.close().
Example:
websocketHeartbeatJs.onmessage = (e) => {
if(e.data == 'close') websocketHeartbeatJs.close();
}
2.ping & pong
Server should to return pong message when the client sends a ping message. Pong message can be of any value. websocket-heartbeat-js will not handle pong message, instead it will only reset heartbeat after receiving any message, as receiving any message means that the connection is normal.
import WebsocketHeartbeatJs from 'websocket-heartbeat-js';
let websocketHeartbeatJs = new WebsocketHeartbeatJs({
url: 'ws://xxxxxxx'
});
websocketHeartbeatJs.onopen = function () {
console.log('connect success');
websocketHeartbeatJs.send('hello server');
}
websocketHeartbeatJs.onmessage = function (e) {
console.log(onmessage: ${e.data});
}
websocketHeartbeatJs.onreconnect = function () {
console.log('reconnecting...');
}
#### use script
let websocketHeartbeatJs = new window.WebsocketHeartbeatJs({
url: 'ws://xxxxxxx'
});
websocketHeartbeatJs.ws == WebSocket(websocketHeartbeatJs.opts.url);
const options = {
url: 'ws://xxxx',
pingTimeout: 15000,
pongTimeout: 10000,
reconnectTimeout: 2000,
pingMsg: "heartbeat"
}
let websocketHeartbeatJs = new WebsocketHeartbeatJs(options);
websocketHeartbeatJs.send('hello server');
websocketHeartbeatJs.onclose = (e) => {
console.log('connect close');
}
#### websocketHeartbeatJs.onerror (function)
websocketHeartbeatJs.onerror = (e) => {
console.log('connect onerror');
}
#### websocketHeartbeatJs.onopen (function)
websocketHeartbeatJs.onopen = (e) => {
console.log('open success');
}
#### websocketHeartbeatJs.onmessage (function)
websocketHeartbeatJs.onmessage = (e) => {
console.log('msg:', e.data);
}
#### websocketHeartbeatJs.onreconnect (function)
websocketHeartbeatJs.onreconnect = (e) => {
console.log('reconnecting...');
}
[1]: https://github.com/zimv/websocket-heartbeat-js/blob/master/README-zh.md
[2]: http://htmlpreview.github.io/?https://github.com/zimv/websocket-heartbeat-js/blob/master/demo/index.html
[3]: http://www.cnblogs.com/1wen/p/5808276.html
[4]: https://github.com/zimv/websocket-heartbeat-miniprogram