首页 > 解决方案 > 从多个线程调用 TcpListener.AcceptTcpClient 方法

问题描述

在我到目前为止的大多数示例中,当服务器同时处理多个客户端时,以下代码作为示例给出

int port = 13000;
TcpListener server = new TcpListener(IPAddress.Any, port);
server.Start();

while (true) {
    // Perform a blocking call to accept requests.
    // You could also user server.AcceptSocket() here.
    TcpClient client = server.AcceptTcpClient();
    //Do stuff
}

为了增加我在重负载下的吞吐量,至少这是我希望实现的,我正在考虑在 4 个左右的线程中调用 AcceptTcpClient 方法。但是,我不确定这是否是线程安全的,或者甚至是建议的使用方式?

我担心的情况是当我得到一个突发连接时,比如数百个客户端正在连接到我的服务器。此外,当我查看TcpClient的Start方法时,我也注意到了 backlog 参数。使用积压是更好的方法吗?我应该只听一个线程并将繁重的处理留给积压算法吗?

标签: c#.netsockets

解决方案


推荐阅读