如何创建C#TCP listner,使所有客户机保持在一个线程中连接,仅在客户机写入时发送事件?
假设我们希望获得类似的API:如何创建C#TCP listner,使所有客户机保持在一个线程中连接,仅在客户机写入时发送事件?,c#,.net,C#,.net,假设我们希望获得类似的API: var Listner = new ServerSocket(); Listner.Bind(URL); Listner.OnData((senderClient, ClientDataStream) => {/* ... */}) 我们还希望传递给OnData的委托在不影响套接字接收性能的有限多线程任务池中执行 只有在执行senderClient上的当前任务时,新senderClient任务才能进入任务池的末尾 当然,在使用OnData时,我们将能够通
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库中是否有这样的智能套接字服务器?我不知道.Net中有
ServerSocket
类。只是。它可以异步地做一些事情。有一篇关于MSDN的广泛文章:
API与伪代码有些不同。没有OnData
事件,但有一个BeginReceive
方法接受回调方法
Socket
类不支持async/await开箱即用(如果您使用的是.NET 4.5),但我遇到了一个为类定义一些扩展方法的例子,使它也可以使用该编程模型。这是一个主要问题吗?这是为现有的基本/原型解决方案祈祷。