【发布时间】:2015-01-08 00:56:54
【问题描述】:
在客户端-服务器架构中,我有一个接受来自客户端的连接的服务器。我希望服务器接受 3 个同时连接,其余连接(如果可用)被搁置,以 FIFO 方式提供服务。 这样做的正确方法是什么?
我想到的一种可能的方法是
创建一个计数器并检查它是否小于 3,接受,在新线程中为客户端提供服务,并增加计数器。当 counter 大于 3 时,只接受套接字描述符并将其保存在队列中。当客户端完成他的工作时,停止线程(例如通过加入)并递减计数器以允许为另一个客户端提供服务。如果队列不为空,则弹出一个套接字描述符,创建一个线程并为客户端提供服务。
感谢您的反馈。
【问题讨论】:
-
或者您可能希望拥有 3 个工作线程,每个工作线程从队列中读取连接请求。 (一般来说,从客户端的角度来看,接受连接然后保持连接可能不是最好的体验。)
-
所以你的意思是我把所有连接都放在一个队列中,并且有 3 个工作线程不断弹出和服务?哦,是的,我同意你的看法,但这只是为了练习。
-
正确。这只是您建议的方案的简化(不再创建/加入线程,也不需要计数器)。
-
你为什么要故意以这种方式限制你的服务器的有用性?
-
我明白为什么不需要计数器但是,创建线程呢?怎么不再需要了?当一个线程完成其任务并且客户端断开连接时,我不应该创建一个新线程来代替它吗?
标签: c multithreading sockets