27

私は、複数のクライアントからの接続を受け入れる必要がある非常に単純なTCP/IPサーバーの設計を任されています。C#で記述する必要があり、.NET4.5を使用しています。とはいえ、.NET4.5でのTCP/IPサーバー/クライアントのスケーラビリティに関する現在の「最先端」は何であるかはわかりません。

私はこの投稿を見ました:スケーラブルなTcp/Ipベースのサーバーを書く方法。ただし、これは.NET 2.0および3.5に関連しており、async/awaitパターンについては言及されていません。

私はサーバーを「古い方法」で書くことができます...しかし、「新しい方法」が何であるかを知りたいです。

  • Socket、TcpClient、またはTcpListenerで新しいAsyncメソッドを使用して、C#でスケーラブルなサーバーを作成するための最良の方法は何ですか?
  • 新しい非同期メソッドはI/O完了ポートを活用しますか?
  • 独自のSocketリスナーをローリングする方が効率的ですか、それともTcpListener / TcpClientクラスはかなり良いですか?

編集:追加の質問。

4

1 に答える 1

11

Socket、TcpClient、またはTcpListenerで新しいAsyncメソッドを使用して、C#でスケーラブルなサーバーを作成するための最良の方法は何ですか?

;に新しいasyncメソッドはありません。で指定されSocketたメソッドは、メモリ使用量を削減するための特別なAPIセットです。そして、いくつかの新しいメソッドを取得しました。*AsyncSocketTcpClientTcpListenerasync

最高のスケーラビリティが必要な場合は、StephenToubのカスタムウェイターをSocket使用するのがおそらく最善です。コーディングが最も簡単な場合は、とを使用することをお勧めしTcpClientますTcpListener

新しい非同期メソッドはI/O完了ポートを活用しますか?

はい、BCLの他のほとんどの非同期APIと同じように。AFAIK、StreamクラスはおそらくIOCPを使用しない可能性がある唯一のクラスです。他のすべての*Begin//メソッドはIOCPを使用します*End*Async

独自のSocketリスナーをローリングする方が効率的ですか、それともTcpListener / TcpClientクラスはかなり良いですか?

クラスはそれなりにかなり良いです。Stephen Toubのブログ投稿には、メモリ使用の点でもう少し効率的です。

于 2013-01-31T15:46:40.027 に答える