c# - 从多个线程调用 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 参数。使用积压是更好的方法吗?我应该只听一个线程并将繁重的处理留给积压算法吗?
解决方案
推荐阅读
- django - Django 3.2 `get_asgi_application` 不能替代通道 AsgiHandler
- c++ - 使用 AVX-512 的两组 SIMD 矢量交集:需要加速
- laravel - 在 Laravel 8 中持久化数组数据
- python - 使用 Python pandas 从另一列驱动列
- docker - 在 Dockerfile 中复制动态传递的位置
- php - 我需要在表格的每一行中放置带有 php 的超链接。如果按下一行,它将被重定向到另一个页面
- java - Java regex Matcher.matches 函数不匹配整个字符串
- java - Arraylist to Hashmap,每行具有多个值和唯一键?
- c# - 不使用统一输入系统向前移动(while 循环错误)
- django - 使用 Django Rest Framework 根据参数动态序列化对象的最佳方法