0

敬意を表して、
Node.js を使用して「net」モジュールを使用して TCP クライアントを作成し、利用可能な場合にデータをストリーミングするハードウェア デバイス (TCP プロトコルのみをサポートする) に接続し、('data',callback)イベントでリッスンできるようにし
ます。単一のクライアントには問題ありませんが、一意の IP アドレスを持つハードウェア デバイスが 10 台以上ある場合は、複数のクライアントとイベントを管理する必要があります。そして質問は

クライアントの数が増えると、別のデバイスからのデータはまだ非同期のままになりますか、それともブロックされますか?

一度に複数のデバイスからデータを受信できますか (アプリケーションはリアルタイムであり、ハードウェアからデータを取得する際に遅延は必要ないため、秒単位の遅延がないことを意味します)

複数のクライアントまたは親/子プロセスを管理し、各子プロセスがソケット通信によってハードウェア(カウント可能)に接続する方法は効率的ですか?

また、TCP 接続が切断された場合 (ネットワークの問題、イーサネット ケーブルの問題)、「接続の中断を検出する信頼できる方法」が存在しないことは確かです。切断された接続に対処して再接続するにはどうすればよいですか?

ガイダンス/経験があれば、このエンジニアリングの問題を解決するために共有してください。

前もって感謝します

4

1 に答える 1

2

これは、node が得意とすることであり、node の優れた使用例です。

クライアントの数が増加する間、別のデバイスからのデータはまだ非同期のままですか、それともブロックされますか?

多数のクライアントがある場合でも、ソケットからの読み取りと書き込みは非同期にする必要があります。

一度に複数のデバイスからデータを受信できますか (アプリケーションはリアルタイムであり、ハードウェアからデータを取得する際に遅延は必要ないため、秒単位の遅延がないことを意味します)

はい、ノード イベント ループは libuv ( http://docs.libuv.org/en/v1.x/ ) を通じて実装されています。私はそれまたはその実装にあまり精通していませんが、イベント処理を利用可能な最も効率的な OS ライブラリ (epoll、kqueue) に委譲していると思います。それを介してIOは非同期であり、ノードネットライブラリを使用してソケットの読み取り、オープン、クローズなどで実行するアクションを登録する以外に特別なことをする必要はありません. https://nodejs.org/api/net.html# net_class_net_socket

複数のクライアントまたは親/子プロセスを管理し、各子プロセスがソケット通信によってハードウェア(カウント可能)に接続する方法は効率的ですか?

net tcp サーバー API を使用することで、特定の IO ソケット イベントで実行するアクションを登録できます。また、多数の同時オープン接続 (数百から数千) をシームレスに処理する必要があります。考えています。

また、TCP 接続が切断された場合 (ネットワークの問題、イーサネット ケーブルの問題)、「接続の中断を検出する信頼できる方法」が存在しないことは確かです。切断された接続に対処して再接続するにはどうすればよいですか?

これはノードに依存しない問題であり、対処方法はいくつかあるはずです。問題は、サーバーに到達できない場合と、接続のレイテンシが非常に長い場合をどのように検出できるかということです.

ソケットが閉じている場合は、close イベントをサブスクライブして、適切なアクションを実行できます。https://nodejs.org/api/net.html#net_event_close_1 . もう 1 つの戦略は、タイムアウトを実装することです。数分間データが受信されない場合は、接続を閉じて接続をクリーンアップできます

于 2016-01-13T18:57:19.093 に答える