c - C 中的多客户端服务器 - 哪种方法最适合这种特定情况?

标签 c multithreading winsock

我需要编写一个将在 Windows XP 或更高版本下运行的服务器。而且我不确定它的解决方案。让我分解一下:

服务器存储所有已连接客户端的列表 - 当客户端想要加入或离开服务器时它会接收数据包,并且它还会每 5 秒向每个客户端发送所有已连接客户端的列表。

现在我不知道是否应该为服务器上的每个客户端使用单独的线程?(客户端数量最多可达 50)还是应该使用 1 个线程并使用带有异步套接字的 select?

最佳答案

对于很少的客户端,基于同步线程的 IO 通常是最简单(最高效)的选择。对于许多客户端,您可以通过使用异步 IO 来节省大量内存和调度开销。

对于 50 个客户,您处于两种情况的边缘。我会进行同步,只是稍微减少我的工作线程的堆栈大小。但即使您必须忍受默认的 1MB 堆栈空间,这种方法仍然可行。

首选同步的原因是异步 IO 很难正确处理,需要大量工作,容易出错,更难调试,并且它会将您的代码转换为一堆困惑的回调。作为交换,您不会阻塞线程。只有在内存节省值得时才使用异步。

关于c - C 中的多客户端服务器 - 哪种方法最适合这种特定情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675579/

相关文章:

vba - winsock 连接功能仅适用于高速连接

c - 在宏中执行 { } while(0) 与 if (1) { }

c - 什么是尾随空格和制表符? K&R 练习 1.18

Python 输入和输出线程

c# - 异步等待新线程的行为

c++ - WriteFile 将文件名写入文件

c - 文件下载 - WinSock

c - 如何在 C 字符串中传递包含引号的系统命令

c - 关于二叉树的一些事情

c - 线程返回值与预期输出不一致