2

次のような API を取得したいとします。

var Listner = new ServerSocket();
Listner.Bind(URL);
Listner.OnData((senderClient, ClientDataStream) => {/* ... */})
  • また、OnData に渡されたデリゲートを、ソケット受信パフォーマンスに影響を与えない限定的なマルチスレッド タスク プールで実行することも必要です。
  • 新しい senderClient タスクは、senderClient の現在のタスクが実行された場合にのみ、タスク プールの最後に到達します。
  • もちろん、OnData を使用している間は、ソケットを介してクライアントにデータを書き戻すことができます。

ClientDataStream length現在のフレームを解析するときに、次の情報を提供することはできません。したがってClientDataStream、非同期操作の形式で必要なだけ読み取る機能を提供する必要があります。

{
   byte[] data = ClientDataStream.Read(5).Wait();
   /* */
   byte[] data = ClientDataStream.Read(someDinamicVarNWeGotFromThatFirstFiveBytes).Wait(); //...
}

タスクが待機している間、おそらく他のタスクが機能する可能性があります。

箱から出してすぐに使用できる.NetまたはOSSライブラリにそのようなスマートソケットサーバーはありますか?

4

1 に答える 1

2

ServerSocket.NET のクラスを認識していません。それだけSocketです。非同期で処理できます。MSDN には広範な記事があります: http://msdn.microsoft.com/en-us/library/5w7b7x5f%28v=vs.110%29.aspx

API は疑似コードと多少異なります。OnDataイベントはありませんBeginReceiveが、コールバック メソッドを受け取るメソッドがあります。

このSocketクラスはそのままでは async/await をサポートしていませんが (.NET 4.5 を使用している場合)、クラスの拡張メソッドを定義して、そのプログラミング モデルも使用できるようにするこのブログ記事を見つけました。

于 2013-04-02T16:59:32.527 に答える