我需要编写一个将在 Windows XP 或更高版本下运行的服务器。而且我不确定它的解决方案。让我分解一下:
服务器存储所有已连接客户端的列表 - 当客户端想要加入或离开服务器时它会接收数据包,并且它还会每 5 秒向每个客户端发送所有已连接客户端的列表。
现在我不知道是否应该为服务器上的每个客户端使用单独的线程?(客户端数量最多可达 50)还是应该使用 1 个线程并使用带有异步套接字的 select?
最佳答案
对于很少的客户端,基于同步线程的 IO 通常是最简单(最高效)的选择。对于许多客户端,您可以通过使用异步 IO 来节省大量内存和调度开销。
对于 50 个客户,您处于两种情况的边缘。我会进行同步,只是稍微减少我的工作线程的堆栈大小。但即使您必须忍受默认的 1MB 堆栈空间,这种方法仍然可行。
首选同步的原因是异步 IO 很难正确处理,需要大量工作,容易出错,更难调试,并且它会将您的代码转换为一堆困惑的回调。作为交换,您不会阻塞线程。只有在内存节省值得时才使用异步。
关于c - C 中的多客户端服务器 - 哪种方法最适合这种特定情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24675579/