コンピューターで特定のアプリケーションを実行しています。同じアプリケーションを、LAN 上の多くのコンピューターまたは世界中のさまざまな場所で実行できます。私は彼らの間でコミュニケーションを取りたいです。だから私は基本的にp2pシステムが欲しい. しかし、どのコンピューター (特定の IP アドレス) がピアになるかは常にわかります。ピアに参加と退出機能を持たせたいだけです。最も重要な目標は、通信速度と所要時間です。ピア間の単純な UDP マルチキャスト (そのようなものが存在する場合) が最速の解決策になると思います。メッセージを紛失しても再送信したくない。libjingle などの既存の p2p ライブラリを使用する必要がありますか。または、私のニーズはかなり基本的なものなので、基本的なフレームワークをゼロから作成するだけですか?
3 に答える
UDPの要点を見逃していると思います。メッセージが宛先に速く到達するという意味では、時間の節約にはなりません。メッセージを投稿しているだけで、メッセージが安全に反対側に到着するかどうかは気にしません。WAN では、おそらく反対側には届かないでしょう。ネットワーク全体の UDP には問題があります。帯域幅が逼迫している途中の任意のルーターによって破棄される可能性があるためです。配信の保証はありません。
あなたの管理下にあるトポロジーの外でUDPを使用することはお勧めしません。
P2P 対有向ソケットに関して - 問題は、移動する必要があるのは何かということです。すべてのピア間で双方向/多方向通信が必要ですか、それともすべてのノードから単一のサーバーと通信していますか?
あなたはマルチキャストについて言及しました-それは、情報を送信し、残りすべてがリッスンする集中型のデータソースがあることを意味します-この場合、P2Pには利点がなく、UDPプロトコルとしてのマルチキャストは複数のネットワーク間でうまく機能しない可能性があります. ただし、各ノードへの TCP 接続を使用して、IGMP 経由ではなく独自に「マルチキャスト」することができます。送信がブロックされることを心配している場合は、スレッド化ソケットと非ブロック化ソケットを使用できます (また使用する必要があります)。もちろん、QoS 設定を使用して、ルーターにソケットを急いで通過させるように「要求」することもできます。
すべてのネットワーク通信をサポートするために zeromq を使用できます。zeromq は、高レベルの通信のために TCP と UDP をカプセル化する単純なライブラリです。
P2P の場合、 0mq の別のモードを使用できます。
- LAN 上の P2P のメンバーを検出するためのモード PGM/EPGM (マルチキャストを使用)
- 1 人のメンバーに質問するためのモード REQ/REP
- ネット上の重複する 1 つのリソースのモード PULL/PUSH
- モード すべてのリクエスタにファイルを送信するためのパブリッシュ/サブスクライブ
警告、zeromq を Windows にインストールするのは難しいです...
HMI の場合は、緑色の靴を使用しますか?
マルチキャストを使えば成功すると思いますが、残念ながら私はライブラリを知りません。
ただし、最初から行う必要がある場合に備えて
これを見てください: http://www.tldp.org/HOWTO/Multicast-HOWTO.html
幸運を :-)