При запуске сервера Node socket.io

У меня есть сервер socket.io и клиент работает правильно. Каждый раз, когда сервер не работает, клиент пытается подключиться через каждые 5 секунд. Когда сервер снова встает, они подключаются без проблем.

Но проблема возникает, когда я жду много времени, прежде чем сервер снова, когда сервер встанет, он выйдет из строя, показывая:

info  - socket.io started
debug - client authorized
info  - handshake authorized DqN4t2YVP7NiqQi8zer9
debug - setting request GET /socket.io/1/websocket/DqN4t2YVP7NiqQi8zer9
debug - set heartbeat interval for client DqN4t2YVP7NiqQi8zer9
debug - client authorized for
debug - websocket writing 1::

buffer.js:287
  pool = new SlowBuffer(Buffer.poolSize);
         ^
RangeError: Maximum call stack size exceeded

Повторное подключение клиента (Выполняется каждые 5 секунд, пока не подключено):

function socket_connect() {
    if (!socket) {
        socket = io.connect('http://192.168.1.25:8088', { 'reconnect':false, 'connect timeout': 5000 });
    } else {
        socket.socket.connect();
    }
    socket.on("connect", function() {
        clearInterval(connect_interval);
        connect_interval = 0;
        socket.emit('player', { refresh_data:true });
    });
}

На стороне сервера, только с экземпляром сокета, он выходит из строя:

var io = require('socket.io').listen(8088);

Я думаю, что проблема такова:

Когда сервер поднимается, он восстанавливает все соединения, выдаваемые клиентом каждые 5 секунд (15 часов отключается * переключение 60 м * 60 с/5 секунд), и он сработает.

Что я могу сделать, чтобы закрыть соединения, которые пытается сделать сервер?

PS: Если я перезагружу клиента, а после сервера, он работает

0
nl ja de
Почему вы вручную пересоединяете и устанавливаете reconnect: false ?
добавлено автор loganfsmyth, источник
Почему вы вручную пересоединяете и устанавливаете reconnect: false ?
добавлено автор loganfsmyth, источник
потому что я хочу повторно подключить каждые 5 секунд, а метод повторного подключения socket.io пытается повторно подключить каждую (инкрементную) секунды и с ограничением пересоединения.
добавлено автор javi_moralesf, источник
потому что я хочу повторно подключить каждые 5 секунд, а метод повторного подключения socket.io пытается повторно подключить каждую (инкрементную) секунды и с ограничением пересоединения.
добавлено автор javi_moralesf, источник

3 ответы

Основная идея socket.io.js заключается в повторном использовании существующего соединения. Вы должны подключать его только один раз, а затем обмениваться сообщениями с помощью socket.emit ()

Я не уверен, почему вы создаете новое соединение между вашим клиентом и сервером каждые 5 секунд. Существует ограничение на количество соединений, которые может создать сервер, но этого должно быть более чем достаточно. Если вы поместите его в цикл, то в конечном итоге на сервере закончится сокет.

io.connect должен выполняться один раз на клиенте, а затем вы можете использовать socket.emit() каждые 5 секунд. Удалите {'reconnect': false, 'time timeout': 5000}, и все будет в порядке.

1
добавлено
Если это связано с подключением. Попробуйте эту функцию socket_connect() {socket = io.connect (' 192.168.1.25:8088' ; , {'reconnect': true, 'time timeout': 5000}); socket.on («connect», function() {clearInterval (connect_interval); connect_interval = 0; socket.emit ('player', {refresh_data: true});}); } дайте результат, чтобы я мог его отладить
добавлено автор user568109, источник
Но я только выполняю новое соединение, когда сервер не работает, когда сервер снова работает, он останавливает обратный вызов функции подключения.
добавлено автор javi_moralesf, источник

Основная идея socket.io.js заключается в повторном использовании существующего соединения. Вы должны подключать его только один раз, а затем обмениваться сообщениями с помощью socket.emit ()

Я не уверен, почему вы создаете новое соединение между вашим клиентом и сервером каждые 5 секунд. Существует ограничение на количество соединений, которые может создать сервер, но этого должно быть более чем достаточно. Если вы поместите его в цикл, то в конечном итоге на сервере закончится сокет.

io.connect должен выполняться один раз на клиенте, а затем вы можете использовать socket.emit() каждые 5 секунд. Удалите {'reconnect': false, 'time timeout': 5000}, и все будет в порядке.

1
добавлено
Если это связано с подключением. Попробуйте эту функцию socket_connect() {socket = io.connect (' 192.168.1.25:8088' ; , {'reconnect': true, 'time timeout': 5000}); socket.on («connect», function() {clearInterval (connect_interval); connect_interval = 0; socket.emit ('player', {refresh_data: true});}); } дайте результат, чтобы я мог его отладить
добавлено автор user568109, источник
Но я только выполняю новое соединение, когда сервер не работает, когда сервер снова работает, он останавливает обратный вызов функции подключения.
добавлено автор javi_moralesf, источник

Я основал проблему ...

Каждый раз, когда вызывается функция socket_connect (), создается функция «socket.on (« connect »...». Поэтому, когда сервер появляется, создается новое соединение, но событие «socket.on (" connect "срабатывает несколько раз ...

Решение было:

function socket_connect() {
    if (!socket) {
        socket = io.connect('http://192.168.1.25:8088', { 'reconnect':false, 'connect timeout': 5000 });
    } else {
        socket.socket.connect();
    }
}

socket.on("connect", function() {
        clearInterval(connect_interval);
        connect_interval = 0;
        socket.emit('player', { refresh_data:true });
    });
0
добавлено
pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

Node.js — русскоговорящее сообщество
Node.js — русскоговорящее сообщество
4 160 участник(ов)

Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было комфортным. Правила: https://rudevs.network/ByaMH6un7 См. также: @js_ru, @react_js, @angular_ru, @vuejs_ru, @devops_ru Вакансии и поиск работы: @javascript_jobs и @nodejs_jobs

Node: русскоязычное сообщество
Node: русскоязычное сообщество
28 участник(ов)

Независимое сообщество node разработчиков на русском языке. Правила: https://node-chat.ru/ Партнеры: @react_ru @ru_vuejs @nuxtjs_ru @ru_docker @nlp_ru