Node.js 'net' module Обработка нескольких клиентов TCP
Уважаемая,
Я использую Node.js для создания TCP-клиента, используя модуль "net" для подключения к аппаратному устройству (которое поддерживает только протокол TCP), которое передает потоковые данные, когда доступно, чтобы я мог прослушивать событие ("data",callback),
Это хорошо для одного клиента, но когда у меня есть более 10 аппаратных устройств с уникальным IP-адресом, мне нужно управлять несколькими клиентами и событиями. И вопрос
В то время как количество клиентов увеличивается. Данные с другого устройства все еще будут асинхронными или будут заблокированы?
Могу ли я получать данные с нескольких устройств одновременно (т.е. без задержки в секундах, потому что приложение - RealTime, и нам не нужно задерживать получение данных с аппаратного обеспечения)
Как управлять несколькими клиентами или родительским / дочерним процессом, когда каждый дочерний процесс подключается к аппаратному обеспечению (счетному) через Socket Communication - это эффективный способ?
И когда разрывается TCP-соединение (проблема с сетью, проблемы с кабелем Ethernet), но я почти уверен, что не существует "надежного способа обнаружения прерываний в соединении". Как я могу решить проблему и снова подключиться к сломанным соединениям?
Если есть какие-либо рекомендации / опыт, пожалуйста, поделитесь, чтобы решить эту инженерную проблему.
Заранее спасибо
1 ответ
Это должно быть чем-то, в чем преуспевает узел, и это отличный вариант использования для узла.
В то время как количество клиентов увеличивается. Данные с другого устройства все еще будут асинхронными или будут заблокированы?
Чтение и запись из вашего сокета должны быть асинхронными, даже если имеется большое количество клиентов.
Могу ли я получать данные с нескольких устройств одновременно (т.е. без задержки в секундах, потому что приложение - RealTime, и нам не нужно задерживать получение данных с аппаратного обеспечения)
Да, цикл событий узла реализован через libuv, http://docs.libuv.org/en/v1.x/. Я не очень знаком с ним или его реализацией, но я предполагаю, что он делегирует обработку событий самой эффективной из доступных библиотек ОС (epoll, kqueue). Благодаря этому IO является асинхронным, и вам не нужно делать ничего особенного, кроме как использовать библиотеку узлов сети и регистрировать, какие действия предпринять при чтении, открытии, закрытии сокетов и т. Д. https://nodejs.org/api/net.html
Как управлять несколькими клиентами или родительским / дочерним процессом, когда каждый дочерний процесс подключается к аппаратному обеспечению (счетному) через Socket Communication - это эффективный способ?
Используя API-интерфейс net tcp-сервера, вы можете зарегистрировать действия для выполнения определенных событий сокета ввода-вывода, и он должен беспрепятственно обрабатывать много одновременных открытых соединений (от сотен до тысяч). Я не совсем уверен, какой тип родительского / дочернего процесса вы настраиваете. иметь в виду.
И когда разрывается TCP-соединение (проблема с сетью, проблемы с кабелем Ethernet), но я почти уверен, что не существует "надежного способа обнаружения прерываний в соединении". Как я могу решить проблему и снова подключиться к сломанным соединениям?
Эта проблема не зависит от узла, и способов ее решения должно быть достаточно много. Вопрос в том, как определить, недоступен ли сервер, если соединение имеет очень высокую задержку?
Если сокет закрыт, вы можете подписаться на событие close и выполнить соответствующее действие. https://nodejs.org/api/net.html. Другая стратегия заключается в реализации тайм-аута. Если в течение нескольких минут данные не получены, вы можете очистить соединение, закрыв его.