UDPソケットを介して約1000台の患者モニターを同時に制御するプログラムをLinuxで作成しています。メッセージを解析して送信し、単一の患者モニター デバイスからデータを収集するためのライブラリの作成に成功しました。デバイスには、以下にリストされているさまざまなスケジューリングの制約があります。
- 各デバイスは、最大 300 ミリ秒 (デバイスによって異なる場合があります) 内にコンピュータ クライアントから常にアライブ リクエストを取得する必要があります。そうしないと、接続が失われます。
- コンピュータ クライアントは、一定期間内にデータをフェッチするために、ポーリング リクエストをデバイスに送信する必要があります。患者モニターから約 5 秒間の平均データをポーリングしているため、5 * 3 = 15 秒ごとにポーリング要求を送信する必要があります。15 秒以内にリクエストを送信できなかった場合、デバイスからの接続が失われます。
現在、現在のプログラムを拡張して、約 1000 以上のデバイスを同時に処理できるようにしようとしています。現在、私のプログラムは 1 つのデバイスからの応答を効率的に処理および解析できます。複数のデバイスを処理する場合、リモート コンピューターもデータを分析できるように、異なるデバイスからの複数の応答を同期し、それらをシリアル化し、TCP ソケット経由でストリーミングする必要があります。これは、複数のプロデューサーと単一のコンシューマーの問題としてよく知られているため、問題ではありません。私の主な関心事は、1000 以上のデバイスの接続を維持するためにどのようなアプローチを使用する必要があるかということです。
インターネットで読んだり、このウェブサイトで同様の質問を閲覧したりした後、主に2つのオプションを検討しています:-
- デバイスごとに 1 つのスレッドを使用します。1000以上のデバイスを制御するために、私には実現不可能と思われる1000以上のスレッドを作成することになります。
- 多重化アプローチを使用して、注意が必要な FD を選択し、一度に 1 つずつ処理します。どうすればいいのか、多重化のアプローチが上記の2つの定数を考慮してすべてのデバイスとの接続を維持できるかどうかはわかりません。
UDPソケットを介して1000以上のリアルタイムデバイスを制御する必要があるこの状況に対処する方法について、いくつかの提案とアドバイスが必要です. 各デバイスは、300 ミリ秒ごとに何らかのアライブ シグナルを必要とし (デバイスによって異なります)、アソシエーション フェーズで言及された時間間隔の約 3 倍でポーリング要求を必要とします。たとえば、ICU の患者モニターにはリアルタイム (平均 1 秒) のデータが必要な場合がありますが、一般病棟の患者モニターには 10 秒の平均データが必要な場合があるため、2 つのデバイスのポーリング期間は 3*1(3 秒) になり、それぞれ 3*10 (30 秒)。
ありがとうシヴァム・カルラ