2016-01-13 4 views
0

Уважаемый,
Я использую Node.js для создания TCP-клиента с использованием модуля «net» для подключения к аппаратурному устройству (которое поддерживает протокол TCP), которое передает данные, когда доступно, так что я мог бы слушать on ('data', callback) event,
Это нормально для одного клиента. Но когда у меня есть более 10 аппаратных устройств с уникальным IP-адресом, мне нужно управлять несколькими клиентами и событиями. и вопрос заключается вМодуль Node.js 'net' Обработка нескольких TCP-клиентов

В то время как количество клиентов увеличивается Данные из различных устройств будет еще Асинхронный или собирается Блокированные?

Могу ли я получать данные из нескольких устройств в то время (в среднем без задержки в секундах, поскольку приложение RealTime, и мы не нужны задержки в получении данных от оборудования)

Как управлять несколькими клиентами или родительским/дочерним процессом с помощью каждого дочернего процесса, связанного с аппаратным обеспечением (счетным) с помощью Socket Communication, эффективным способом?

И когда соединение TCP разрывается (проблема с сетью, проблемы с Ethernet-кабелем), но я уверен, что нет «надежного способа обнаружения прерываний в соединении». Как я могу подключиться и подключиться к разъединенным соединениям ?

Если какое-либо руководство/опыт, пожалуйста, поделитесь, чтобы решить эту проблему.

Заранее спасибо

ответ

0

Это должно быть что-то, что узел отлично справляется, и является отличным примером использования узла.

В то время как количество клиентов увеличивается Данные от другого Устройство будет оставаться асинхронным или оно будет заблокировано?

Чтение и письмо от вас сокета должно быть асинхронным, даже если существует большое количество клиентов.

Могу ли я получать данные из нескольких устройств в то время (в среднем без задержки в секундах, поскольку приложение RealTime, и мы не нужны задержки в получении данных от оборудования)

Да, цикл событий узла реализован через libuv, http://docs.libuv.org/en/v1.x/. Я не очень хорошо знаком с ним или его реализацией, но я предполагаю, что он делегирует обработку событий наиболее эффективной доступной библиотеке ОС (epoll, kqueue). Через него IO является асинхронным, и вам не нужно делать ничего особенного, за исключением использования узлам чистой библиотеки и зарегистрировать, какие действия предпринять на чтение сокета, открытие, закрытие и т.д. https://nodejs.org/api/net.html#net_class_net_socket

Как управлять несколькими клиентами или Parent/Child Process с каждым ребенком процесс подключения к аппаратуре (счет) по Socket Communication - эффективный способ?

С помощью Net Api TCP сервера, вы можете зарегистрировать действия, чтобы взять на себя определенные IO событий сокета, и он должен легко обрабатывать много много одновременных открытых соединений (от сотен до тысяч) Я не очень ясно, на какой-то родительский/дочерний процесс, который вы имеете в виду.

И Когда соединение разрывается TCP (сеть Проблема, Ethernet кабель проблемы), но я уверен, что существует нет «надежный способ не обнаруживает перебои в связи» .Как я могу решить и снова К сломанным соединениям?

Это проблема, не зависящая от узла, и должно быть довольно много способов борьбы с ней. Проблема в том, как вы можете определить, недоступен ли сервер, а также если соединение имеет чрезвычайно высокую задержку?

Если разъем закрыт, вы можете подписаться на событие закрытия и выполнить соответствующее действие. https://nodejs.org/api/net.html#net_event_close_1. Другая стратегия - реализовать тайм-аут. Если в течение нескольких минут не получено данных, вы можете очистить соединение, закрыв его.

+0

Спасибо за отличный ответ! И процесс создания родительского/дочернего процесса просто имеет массив IP-адресов в родительском процессе и разворачивает программу сокета как дочерний процесс для каждого уникального IP-адреса, поэтому я могу управлять им из родительского процесса, когда они выходят из-за ошибки. Другая основная проблема - событие закрытия сокета запускается, когда сервер/клиент отправляет пакет FIN, поэтому, когда я отсоединяю кабель Ethernet, ошибка/закрытие вызова никогда не запускаются (я протестировал это), я тестирую их, потому что это критическое приложение реального времени. И ваши объяснения потрясающие, позвольте мне пройти и реализовать его, чтобы я мог принять ответ. – androidlover

+0

@androidlover, если вы отключите ethernet, есть вероятность, что если вы подключите его обратно, он все равно будет работать, поэтому закрытие соединения сразу может не иметь смысла, если сеть перестанет работать некоторое время. Это ОС, которая обрабатывает пересоединение сокетов ... Хотя тайм-аут может использоваться для предотвращения неопределенного сокета. –

+0

что я думал просто написать через сокет и проверить, что соединение в прямом эфире (хост доступен), если не подключиться по методу setInterval. или просто командой setInterval ping для хоста - я делаю это, чтобы убедиться, что я все еще подключен к аппаратным устройствам. Аппаратное устройство не отправляет какой-либо пакет FIN, чтобы закрыть соединение при любых обстоятельствах. – androidlover

Смежные вопросы