Коллеги, доброго времени суток, прошу помощи или совета.
В общем суть такая, есть сервер, есть клиент, который я собственно пишу на NodeJS. Все запускаю локально на ubuntu 18.04 через WebStorm. Собственно все норм, приложение запустилось, подключилось по ws к серверу пошли сообщения, туда сюда, но есть момент)) я оставляю комп на некоторое время, а через это самое время на сервере происходит disconnect с моим клиентом, при чем событие close или error у ws не срабатывает, т.е. клиент как бы подключен а на сервере нет его.
Может у кого то была такая ситуация, в чем дело может быть?
На всякий случай код клиента (ну мало ли):
'use strict';
const WebSocket = require('ws');
const logger = require('../logger');
const event = require('../eventBus');
module.exports = class WebSockets {
constructor() {
this.url ='wss://test.ru/ws';
this.client = null;
this.timeout = 0;
this.time = 1000 * 10;
event.bus.on('ws:connect', this.connect.bind(this));
event.bus.on('ws:send', this.sendMessage.bind(this));
}
connect() {
this.client = new WebSocket(this.url, '',{});
this.client.addEventListener('open', this._openHandler.bind(this));
this.client.addEventListener('message', this._messageHandler.bind(this));
this.client.addEventListener('error', this._errorHandler.bind(this));
this.client.addEventListener('close', this._reconnection.bind(this));
}
_openHandler() {
if (this.timeout !== 0) {
clearTimeout(this.timeout);
this.timeout = 0;
}
logger(`info`, `[ws][-- open connection --]`);
}
_messageHandler(message) {
let data = (message.data) ? JSON.parse(message.data) : [];
if (data.length > 0) event.bus.emit(`app:command`, data);
}
_errorHandler() {
logger(`error`, `[ws][-- error connection --]`);
}
_reconnection() {
this.timeout = setTimeout(() => {
logger(`error`, `[ws][-- reconnecting ... --]`);
this.connect();
}, this.time);
}
_close() {
logger(`error`, `[websockets][close][ -- close connection -- ]`);
// this.client.removeEventListener('open', this._openHandler.bind(this));
// this.client.removeEventListener('message', this._messageHandler.bind(this));
// this.client.removeEventListener('error', this._errorHandler.bind(this));
// this.client.removeEventListener('close', this._reconnection.bind(this));
// this.client.close(1000, `dead`);
}
sendMessage(object) {
(this.client !== null)
? this.client.send(JSON.stringify(object))
: logger(`error`, `[websockets][sending][ -- no connection -- ]`);
}
};
Вроде как ничего сверх сложного нет, но тем не менее. Заранее благодарю.