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