LAN上のすべての人に連絡して、現在IPを使用してサービスを実行しているデバイスを見つけようとしています。サービスを実行しているすべてのデバイスは、オンラインになったときに他のどのデバイスが接続されているかを認識します。私は基本的なネットワークの経験(tcp / udp)を持っていますが、より複雑な通信パッケージについてはあまり行っていません。私はこれまでに調査/試行したことを投稿し、将来の潜在的な解決策に関する試行錯誤の時間を制限するために専門家の回答を得たいと思いました。
要件:
- 現在Javaを使用していますが、言語間の通信が必要です。
- 許容可能な時間枠(最大数秒)で、できれば確実に実行する必要があります。
- 複数のパッケージ/テクノロジーの複雑さが増すのを避けるために、ブロードキャストとその後の通信の両方に同様のテクニックを使用したいと思います。
- 現在、既知のIPにハートビートを送信して、まだ接続されていることを警告することを計画していますが、後でLANに継続的にブロードキャストしたい場合があります。
- このサービスにクロスランゲージRPC通信を使用することに興味がありますが、この手法では必ずしもそれを使用する必要はありません。
- 後の通信(非ブロードキャスト)は信頼できるものでなければなりません。
研究と試みられたもの:
UDP-言語間のコミュニケーション、信頼できる配信の欠如を心配しており、以下のような1つのソリューションを使用するのではなく、別のコミュニケーション方法を追加します。別のより完全な解決策が見つかった場合は、それを避けたいと思います。
Apache Thrift-現在、私はすべての潜在的なIPを反復処理し、それぞれに接続しようとしました。接続を試行するたびにタイムアウトが長くなるため、これは遅すぎます(openと呼んだ場合)。放送オプションはまだ見つかりません。
ZeroMQ-基本的なzeromqでほとんどテストを行いませんでしたが、私は過去にそのラッパーのみを使用しました。pub / sub機能はこのシナリオに役立つようですが、LAN内のすべてのIPをサブスクライブすることを心配しています。また、まだサービスが実行されていないIPをサブスクライブしようとするとどうなるか心配しました。
これらの推奨事項のいずれかが、私の要件を考慮して他の推奨事項よりもうまく機能するように見えますか?よりうまく機能する可能性のあるテクノロジーに関する他の提案はありますか?
ありがとう。