如何创建C#TCP listner,使所有客户机保持在一个线程中连接,仅在客户机写入时发送事件?

如何创建C#TCP listner,使所有客户机保持在一个线程中连接,仅在客户机写入时发送事件?,c#,.net,C#,.net,假设我们希望获得类似的API: var Listner = new ServerSocket(); Listner.Bind(URL); Listner.OnData((senderClient, ClientDataStream) => {/* ... */}) 我们还希望传递给OnData的委托在不影响套接字接收性能的有限多线程任务池中执行 只有在执行senderClient上的当前任务时,新senderClient任务才能进入任务池的末尾 当然,在使用OnData时,我们将能够通

假设我们希望获得类似的API:

var Listner = new ServerSocket();
Listner.Bind(URL);
Listner.OnData((senderClient, ClientDataStream) => {/* ... */})
  • 我们还希望传递给OnData的委托在不影响套接字接收性能的有限多线程任务池中执行
  • 只有在执行senderClient上的当前任务时,新senderClient任务才能进入任务池的末尾
  • 当然,在使用OnData时,我们将能够通过套接字将数据写回客户端
在分析当前帧时,我们无法提供有关next
ClientDataStream
length
的信息。因此,
ClientDataStream
应提供以异步操作的形式读取所需数据的能力:

{
   byte[] data = ClientDataStream.Read(5).Wait();
   /* */
   byte[] data = ClientDataStream.Read(someDinamicVarNWeGotFromThatFirstFiveBytes).Wait(); //...
}
当任务等待时,它可能会允许其他任务工作


在.Net开箱即用或某些OSS库中是否有这样的智能套接字服务器?

我不知道.Net中有
ServerSocket
类。只是。它可以异步地做一些事情。有一篇关于MSDN的广泛文章:

API与伪代码有些不同。没有
OnData
事件,但有一个
BeginReceive
方法接受回调方法


Socket
类不支持async/await开箱即用(如果您使用的是.NET 4.5),但我遇到了一个为类定义一些扩展方法的例子,使它也可以使用该编程模型。

这是一个主要问题吗?这是为现有的基本/原型解决方案祈祷。