0

プロキシを間に置いたクライアント/サーバーセットアップがあります。5つのクライアントが接続されているときに、特定のパケットをクライアント->サーバー->クライアントではなく、クライアントからクライアントに中継できるように、プロキシを少しスマートに動作させたいと思います。現在、各クライアントは独自のスレッドを取得しているため、他のクライアントへの参照を持つグローバル状態を共有するための最良の方法は何ですか。この状態オブジェクトは、実際には、各クライアントに関連付けられたIDとそのソケットへの参照を保持しているだけなので、送信できます。

辞書のような単純なものは機能しますか?私の懸念は、辞書にアクセスしているときに、別のクライアントが接続または切断して、辞書にアクセスしているときに辞書を変更する可能性があることです。

4

3 に答える 3

0

セマフォを読む必要があります。

lockただし、C#のコンテキストでは、キーワードを慎重かつ適切に使用していることを確認する必要があります。このようなものは難しく、壊滅的な方法で間違えるのは非常に簡単です。

于 2012-08-09T22:05:07.287 に答える
0

プロキシが WCF サービスとして設定されている場合は、ASP.NET キャッシュを使用できます。WCF のセッション状態は呼び出しごとですが、キャッシュは依然として舞台裏に潜んでいます。これは単にキャッシュを提供するだけであることに注意してください。キャッシュへの事前にロールされたアクセス制御を提供するわけではないため、依然として競合の問題が発生する可能性があります。

キャッシュの使用に関する詳細については、この以前の SO の質問 How to return HttpContext.Current.Cache from WCF?を確認してください。およびこのブログ投稿Enable Session State in a WCF service .

于 2012-08-09T22:19:23.470 に答える
0

辞書が状況に適したデータ構造である場合、辞書は機能します。この決定は、マルチスレッドとはほとんど関係ありません。

つまり、辞書を使用することにした場合は、次を使用して辞書へのアクセスを同期する必要があります。

  • たとえば、lockステートメント
  • または、スレッドセーフバージョンのConcurrentDictionaryに切り替えるDictionary
于 2012-08-09T22:20:32.490 に答える