Каждый день на этой неделе мой рабочий день начинался с перезапуска службы нашего узла.И каждый раз он просто выходил со следующим сообщением:
node.js:134
throw e; // process.nextTick error, or 'error' event on first tick
^
Error: ETIMEDOUT, Connection timed out
at Socket._readImpl (net.js:163:14)
at Socket._onReadable (net.js:633:22)
at IOWatcher.onReadable [as callback] (net.js:177:10)
У меня возникают проблемы с определением, какая именно часть моего кода ответственна за эту ошибку, и почему именно эта ошибка настолько серьезна, что она делает узелвыход.
В любом случае, я немного покопался и подумал, что это может быть просто ошибкой.Я добавил несколько прослушивателей on ('error') для каждого экземпляра сервера с небольшим количеством настраиваемых сообщений в журнале, чтобы убедиться, что оно перехвачено, но безрезультатно, я все еще сегодня работал с обычным сообщением об ошибке .. (Идействительно ли существует такая вещь, как события 'error', которые должны быть перехвачены?)
Простой тайм-аут соединения не должен действительно привести к сбою всей службы.
Основная цель службы - сохранитьоткрытое tcp-соединение с несколькими подключающимися клиентами и возможность выдавать команды (это очень похоже на частный ботнет для встроенного продукта).Таким образом, в 95% случаев мы просто бездействуем нашими tcp-сокетами и отправляем пакеты keep-alive.Поэтому требуется, чтобы клиенты в любой момент могли потерять соединение, не прерывая работу службы для других подключенных клиентов.
Мы используем последний стабильный узел филиала v0.4.13-pre и работаем на сервере Ubuntu.