Таким образом, я пытаюсь записать простой сервер сокета TCP что информация о широковещательных сообщениях всем связанным клиентам. Таким образом, когда пользователь соединяется, они добавляются к списку клиентов, и когда поток испускает близкое событие, они удалены из клиентского списка.
Это работает хорошо, за исключением того, что иногда я отправляю сообщение так же, как пользователь разъединяется.
Я попытался перенестись stream.write()
в a try/catch
блок, но никакая удача. Кажется, что ошибка неуловима.
Решение состоит в том, чтобы добавить прослушиватель для события 'error' потока. Поначалу это может показаться нелогичным, но оправдание этому есть.
stream.write () отправляет данные асинхронно. К тому времени, когда этот узел осознал, что запись в сокет вызвала ошибку, ваш код перешел, минуя вызов stream.write, поэтому у него нет возможности вызвать ошибку там.
Вместо этого в этой ситуации узел генерирует событие 'error' из потока, а EventEmitter кодируется таким образом, что если нет слушателей для события 'error', ошибка возникает как исключение верхнего уровня и процесс заканчивается.