私は、複数のクライアントからの接続を受け入れる必要があるかなり単純なTCP/IPサーバーの設計を任されています。 C#で記述する必要があり、.NET 4.5を使用しています。とは言っても、.NET 4.5におけるTCP/IPサーバー/クライアントのスケーラビリティの現在の「最先端」は何なのかわかりません。
私はこの投稿を見ました: スケーラブルなTcp/Ipベースのサーバーの書き方 。しかし、これは.NET 2.0および3.5に関連しており、非同期/待機パターンについては触れていません。
私はサーバーを「古い方法」で書くことができますが、「新しい方法」が何であるか知りたいです。
編集:追加の質問。
Socket、TcpClient、またはTcpListenerで新しいAsyncメソッドを使用してC#でスケーラブルなサーバーを作成する最良の方法は何ですか?
async
には新しいSocket
メソッドはありません。 Socket
の*Async
という名前のメソッドは、メモリ使用量を削減するための特別なAPIセットです。 TcpClient
およびTcpListener
は、いくつかの新しいasync
メソッドを取得しました。
最高のスケーラビリティが必要な場合は、おそらく Stephen ToubのSocket
のカスタムウェイターを使用するのが最適です。コーディングを最も簡単にしたい場合は、TcpClient
とTcpListener
を使用したほうがよいでしょう。
新しい非同期メソッドはI/O完了ポートを利用しますか?
はい、BCLの他のほとんどの非同期APIと同様です。申し訳ありませんが、Stream
クラスは、IOCPを使用しない可能性がある唯一のクラスです。他のすべての*Begin
/*End
/*Async
メソッドはIOCPを使用します。
独自のソケットリスナーをロールする方が効率的ですか、それともTcpListener/TcpClientクラスはかなり良いですか?
クラスはそのままでかなり良いです。 Stephen Toubには ブログ投稿 があり、メモリ使用の点で少し効率的です。
.net4.5では、async/awaitキーワードを使用してTCPサーバーを構築できます。これがサンプルコードです。 async await tcp server