c - 在单个 udp 服务器中处理 40 个客户端的可能算法

标签 c windows multithreading network-programming udp

我正在研究 udp 服务器/cient 应用程序。我希望我的服务器一次能够处理 40 个客户端。 现在我正在使用创建一个接收线程的方法,该线程连续接收数据,并在需要时创建一个发送线程来发送数据。 由于套接字队列足够大,可以缓冲来自 40 个客户端的数据,所以我只使用一个接收线程。 实现这种单服务器多客户端的其他可能方法是什么 申请?

最佳答案

您当然可以运行多个服务器线程,但每个线程都必须监听不同的 UDP 端口。如果这对您来说没问题,请尝试使用多个线程,但不要超过您拥有的处理器内核数。由于线程切换,除此之外的任何事情都会减慢整个过程。

您可以尝试的另一件事是将服务器进程的优先级设置为实时。 UDP 数据包是易变的——如果你抓得太慢,它们就会消失。但是,这种高优先级带来了风险:如果您的服务器没有正确编写,它可能会消耗 100% 的 CPU 并导致系统几乎挂起。它也不应该让 CPU 的其他进程饿死,但是同样,如果它写得很好,例如不使用 Thread.Sleep

但是,如果您的系统在您可以测试的最大负载下与当前设计一起正常工作,那么最好的办法就是什么都不做。

关于c - 在单个 udp 服务器中处理 40 个客户端的可能算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16014221/

相关文章:

c - 如何在 c 中使用 argc、argv[] 的同时提示用户输入?

c++ - 如何在 C++ 中为 Windows 7 x64 的特定文件提取 "Date column"值

c++ - 从 DLL 访问 Windows CE .EXE 符号

java - 如何在 GUI 线程之间共享信息?

c - 变量参数的指定初始值设定项

c - 无法打印从函数返回的 char* 是怎么回事?

c - 我们确实需要具有与 "PTHREAD_MUTEX_STALLED"相反的属性 "PTHREAD_MUTEX_ROBUST"的互斥量吗?

android - Android 中的线程亲和性与 C 程序

c - 如何在C程序中分离这个数字-51.235

java - 如何用 Java 编写程序来编译 .asm(汇编语言)文件?