1

私はC#でマルチクライアント/マルチサーバープログラムを開発していますが、要点を理解する前に、誰かが同様のプロジェクトに取り組んだことがあり、実装のヒントやアイデアを共有できるのではないかと考えていました。

  • サーバーは多くのPCに配置され、クライアントからの着信接続をリッスンします(または、サーバーがブロードキャストし、クライアントがリッスンする必要がありますか?)。
  • クライアントが起動すると、潜在的なサーバーIPアドレスのリストが自動的に入力されます。
  • サーバーが閉じると、クライアントはそのサーバーをリストから削除する必要があります。
  • 新しいサーバーが起動したら、クライアントに通知してリストに追加する必要があります。
  • サーバーはクライアントとしても機能する可能性があり、サーバー自体と他のすべてのサーバーを認識できる必要があります。
  • クライアントからサーバーに送信され、サーバーに影響を与えるメッセージは、接続されているすべてのクライアントに変更をブロードキャストする必要があります。
  • サーバーはWindowsサービスである必要がありますか?それにはどのような長所/短所がありますか?

これを始める方法について何かアイデアはありますか?私はUDPマルチキャストとLANスキャンを調べてきました。C#と.NET4.0を使用しています

編集:これを見つけました:http ://code.google.com/p/lidgren-network-gen3/誰かがそれを使った経験があり、それを推奨する/推奨しないことができますか?

4

2 に答える 2

1

NetPeerTcpBindingPeer Mesh を作成するには、WCF 通信をお勧めします。クライアントとサーバーはすべて、ピア リゾルバーを使用してメッシュに参加します。PNRP を使用するか、カスタム ピア リゾルバを作成できます (.Net は実際には と呼ばれる実装を提供しますCustomPeerResolverService)。ピア ツー ピア ネットワークのドキュメントを参照してください。

また、 DiscoveryProxy を使用してDiscoveryサービスを実装することもできます。検出サービスを使用すると、サービスはエンドポイントをアナウンスできます。その後、ディスカバリー・サービスは、検索要求 ( FindCriteriaを参照) を処理して、要求に一致するエンドポイントを返すことができます。これは、マネージド ディスカバリと呼ばれます。もう 1 つのモードは Ad Hoc Discovery です。各サービスは UDP を介してエンドポイントをアナウンスし、検出クライアントはこれらのエンドポイントのネットワークをプローブします。

私は実際にマネージド ディスカバリ サービスをピア 2 ピア WCF ネットワークと組み合わせて実装し、P2P 経由で公開されたサービス エンドポイントをすべて共有するディスカバリ サービスの冗長メッシュを提供しました。UDP プロービングを使用したアドホック ディスカバリーは低速であり、一部のネットワーク境界を越えるといくつかの制限があるため、マネージド ディスカバリーを使用するとパフォーマンスが大幅に向上することがわかりました。

どちらか/両方のテクノロジーがあなたのソリューションにつながると思います。

于 2012-06-12T15:30:38.180 に答える
1

つまり、これは事実上、すべてのサーバーがクライアントであるが、すべてのクライアントがサーバーであるわけではないピア ツー ピア スタイルのネットワーク (ほとんど bittorrent に似ています) です。

要件は、すべてのクライアントが他のすべてのサーバー (クライアント) のリストを保持する必要があることです。

問題は、最初にサーバー IP をクライアントに取得することにあります。固定 DNS を持つマスター サーバーを使用して、すべてのサーバーがチェックインし、クライアントが定期的にチェックする一種のトラッカーとして機能させることができます。

別のオプション (または追加の方法) は、ピア交換スタイルのシステムを使用することです。このシステムでは、クライアントとサーバーのそれぞれが、ローカル ネットワーク上で UDP ブロードキャスト パケットを使用して互いを検出し、ルーティングのような方法で、認識しているサーバーを転送します。プロトコル。ただし、PC がインターネットなどの非ローカル ネットワーク上に分散している場合、PC がお互いを発見する可能性はほとんどないため、この方法はサーバーを見つける他の方法と組み合わせて使用​​する場合にのみ役立ちます。また、クライアントがお互いのルーター NAT を介して相互に接続できるようにするには、おそらくルーターの UPnP を処理する必要があるため、この方法はおそらく複雑すぎて得られる利益が得られません。(ただし、LAN だけの場合は、これで十分です。)

3 番目のオプション (これも torrent テクノロジによく似ています) は、分散ハッシュ テーブルを使用して、中央のマスター サーバーに依存することなく、サーバーの IP に関する情報をクラウドに保存することです。

私は以前にこのようなプロジェクト (純粋な P2P、サーバーレス メッセージング システム) に挑戦したことがありますが、それを機能させることはできませんでした。大量のピア、または他のすべてのサーバーを追跡するマスター サーバーがなければ、すべてのサーバーの IP を確実に取得することは非常に困難です。

于 2012-06-12T15:41:26.680 に答える