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个)使用它并处理请求,而不是一个线程。