有一项任务 - 我需要一个具有以下属性的客户端 - 服务器应用程序:
- 客户端使用阻塞套接字
- 服务器是被动的:他接受传入的连接,获取一些数据,处理它并发回结果
- 服务器有多个线程(main除外),从1到大约100
- 所有操作都在一台计算机上,即客户端和服务器都使用localhost
- 传输的最大数据大小约为 1 KB
一开始我已经实现了基于epoll的服务器:
- 主线程使用epoll执行IO,工作线程执行数据处理
- 所有服务器套接字都是非阻塞的
- 服务器有两个队列:主线程放置客户端请求的传入,主线程从哪里回复。
我的作品然后我再次考虑了这个设计:它没有考虑localhost。它更普遍,因此更复杂。做它比它更简单会很好。
所以:
- 主线程执行epoll_wait,接受并管理连接队列。连接队列是主线程放置已接受连接的队列
- 侦听套接字是非阻塞的。接受的套接字阻塞
- 当任何套接字变为可读主线程唤醒工作线程时,工作人员在阻塞模式下进行恢复,处理并以阻塞模式发送。
你怎么看?那个设计够用吗?
感谢您的评论!