C# 如何分发来自TCP侦听器的请求
我正在使用C# 如何分发来自TCP侦听器的请求,c#,.net,tcpclient,tcplistener,C#,.net,Tcpclient,Tcplistener,我正在使用TcpListener(Clase)示例来处理TCP请求 但似乎同时这个TCP侦听器将接受多个请求,这些请求应该稍后在两个Web服务中一起处理,并且结果必须返回到TCP客户端 我想做以下几点: 获取用于读写NetworkStream-stream=client.GetStream()的流对象并将其保存在特殊容器类中 将该类放入特殊的Queuehelper类,如下所示 更改队列时,激发已实现事件,以使用任务异步处理下一个队列项目 在任务中与Web服务通信,并将响应发送到TCP客户端 请让
TcpListener
(Clase)示例来处理TCP请求
但似乎同时这个TCP侦听器
将接受多个请求,这些请求应该稍后在两个Web服务
中一起处理,并且结果必须返回到TCP客户端
我想做以下几点:
NetworkStream-stream=client.GetStream()的流对象代码>并将其保存在特殊容器类中
Queue
helper类,如下所示队列
时,激发已实现事件,以使用任务
异步处理下一个队列项目任务中
与Web服务
通信,并将响应发送到TCP客户端
请让我知道此体系结构非常重要,能够解决对
TCP侦听器的多个请求
,我建议您使用netmq。看一下,使用队列是一个明确可行的想法,但是考虑它所服务的目的。它限制了您可以并行处理的请求数量。在某些情况下,您可能需要限制这一点,最常见的情况是,如果每个请求处理都执行CPU限制的工作(繁重的计算)。然后,您并行处理大量数据的能力是有限的,您可能需要使用队列方法
在您的请求中,处理执行IO绑定的工作(等待web请求完成)。这不会消耗太多的服务器资源,而且您可以并行处理大量此类请求,因此在您的情况下很可能不需要队列
即使使用队列,一次只处理一个项目也很少有用。相反,使用X线程处理队列(其中X再次取决于工作是CPU还是IO绑定的,对于CPU,您可以使用X=内核数,对于IO,您需要更多)。如果您使用太少的线程来处理您的队列,您的客户机将等待更多的线程,基本上什么都不做,甚至可能因超时而失败。为什么要对它们进行排队?然后所有后续请求都将等待,直到前面的所有请求都完成。@Evk Well。。。我不确定队列,我想我需要某种缓冲区来保持
NetworkStream=client.GetStream()代码>快速。。。你认为创建任务并保留所有逻辑就足够了吗?我认为这取决于负载。在某些情况下,我认为队列是一个很好的解决方案,尤其是当您对每个项目所做的操作都受到CPU的限制(一些繁重的计算)时。但这里的事情是IO绑定的(您发出web请求),所以您应该能够在不排队的情况下处理很多请求。所以,如果这个服务的负载不是很高——我想是的,并行处理(常规任务)应该可以。你可以在这个端口上使用一个原始套接字。但我不建议这样做,如果您仍然使用队列路由,至少会让许多线程(比如16个)使用它并处理请求,而不是一个线程。