C# 如何使用ASP.NET和C管理大量TCP连接#

C# 如何使用ASP.NET和C管理大量TCP连接#,c#,asp.net,asynchronous,tcpclient,C#,Asp.net,Asynchronous,Tcpclient,我有一个连接到第三方服务器的应用程序,我们称之为服务器a。我有四个不同的端口,即。 4000, 40001, 40002, 40003. 在每个端口上,我可以创建20个连接,这样我就可以创建80个与server-A的连接。我想创建一个服务层,该层应该在提到的端口上与server-A通信。该技术将是asp.net C# 问题陈述 1-应用程序应该是非阻塞/异步的,以便每天处理1000万到2000万个请求 2-每当服务层启动时,它都会在每个端口上创建20个连接。(共80个连接) 2-所有连接应保持2

我有一个连接到第三方服务器的应用程序,我们称之为服务器a。我有四个不同的端口,即。 4000, 40001, 40002, 40003. 在每个端口上,我可以创建20个连接,这样我就可以创建80个与server-A的连接。我想创建一个服务层,该层应该在提到的端口上与server-A通信。该技术将是asp.net C#

问题陈述

1-应用程序应该是非阻塞/异步的,以便每天处理1000万到2000万个请求

2-每当服务层启动时,它都会在每个端口上创建20个连接。(共80个连接)

2-所有连接应保持24/7连接/活动,并在任何连接断开/断开时重新连接。它将在空闲时间发送心跳消息

我的问题

  • 如何管理这些连接?当TCP套接字成功时,我是否应该将它们逐个添加到静态列表中
  • 我如何知道某个连接已断开/断开
  • 如何在不同端口上发送某些请求?假设a>b在端口4000上发送,或者a要处理如此大的流量,您需要做一些事情

    假设

    • 您正在连接到另一个客户端的服务器
    • 您拥有来自多台机器或任何给定机器上的多个工作进程的大量web流量
    • 您知道如何创建TCP客户机-服务器对象和处理连接
    对于服务器上少于80个工作线程:

    • 因为每个线程都是同步处理的,所以您只需要为每个线程使用一个连接
    • 如果没有一个web服务器运行超过20个工作进程,那么您可以为每个服务器指定一个要使用的端口。将端口作为变量粘贴到web.config文件中,并在创建连接时使用它。你永远不会达到极限
    • 将连接存储在整个应用程序都可以使用的共享对象中(可以将其放入BLL层),如果出现连接错误,请在该线程上重新创建新连接
    对于服务器上超过80个工作线程:

    • 执行与上一步相同的操作,但此时您要么需要协商更多连接,要么将在应用程序和希望访问的服务器之间添加一个新层
    • 第二层充当双方的代理,可以管理连接池,并在每次需要访问Server-a时提取连接,完成后将其放回连接池
    • 无论何时连接到代理应用程序,都要生成一个新线程来进行处理,直到连接断开或关闭
    • 跟踪你打开的连接和viola,你可以拥有你需要的任意多的客户端,但你的瓶颈将是这80个连接,即使你有成百上千个

      • @Kartoos Khan,我已经根据这些要求提供了一些服务,使用异步方法是在C#中创建高性能服务的最佳方法,因为:

        • 它不会像套接字一样阻止IO外围设备
        • 最小化线程并提高其性能
        让我向你推荐这本书。在4,异步编程一章中,您需要了解的信息以提高性能

        根据我的经验,我的建议如下:

      • 创建一个主要威胁来处理主程序

      • 创建一个类来处理套接字服务器,它使用方法
        beginacept
        EndAccept
        实现一个异步进程来接受连接,这是如何使用它的一个示例。 创建另一个类来处理套接字连接,该类的属性为
        socket
        对象

        2.1创建一个方法来启动读取过程,服务器类将调用该方法来启动端点之间的通信。这种方法将以异步方式启动读取过程

        2.2要以异步方式进行读写,必须从套接字获取
        网络流
        ,并使用
        BeginRead
        EndRead
        方法接收数据,使用
        beginewite
        EndWrite
        方法发送数据。这是文件

      • 如果您的服务只需要连接到服务器,请忽略步骤1并实现客户端类以启动到特定端点的连接

      • 使用集合类(可以是
        字典
        、键值对集合)存储每个客户端类,并使用套接字ID作为访问每个客户端类的键

      • 由于每个客户端套接字都处理自己的套接字,所以我使用一种方法在同一个客户端套接字上重新连接,这样每个客户端都对自己负责

      • 主程序将负责创建每个客户机服务器,根据需要设置每个客户机的端点,并开始连接它们。在这种情况下,
        TCPClient
        允许您使用以下方法开始连接的异步过程

      • 您可以查看有关此问题的更多详细信息


        我希望这可能对您有用。

        在每个端口上,我可以创建20个连接
        -这个限制来自哪里?它是服务器限制。在这种情况下,您需要找到方法,在任何给定时间将任何端口上的连接数限制为20。实现这一点的方法有很多,到目前为止最简单的方法是FIFO信号量。这种数据结构基本上解决了您的问题。“我必须复制相同的代码80次”-您为什么要复制代码?为它创建一个类,并有80个相同类的实例。我同意,但这如何有助于识别act