2

假设我们想要这样的 API:

var Listner = new ServerSocket();
Listner.Bind(URL);
Listner.OnData((senderClient, ClientDataStream) => {/* ... */})
  • 我们还希望传递给 OnData 的委托在不影响套接字接收性能的有限多线程任务池中执行。
  • 只有当 senderClient 上的当前任务被执行时,新的 senderClient 任务才会进入任务池的末尾。
  • 当然,在使用 OnData 时,我们将能够通过套接字将数据写回客户端。

ClientDataStream length解析当前帧时,我们无法提供关于 next 的信息。因此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 回答