0

有一项任务 - 我需要一个具有以下属性的客户端-服务器应用程序:

  • 客户端使用阻塞套接字
  • 服务器是被动的:他接受传入的连接,获取一些数据,处理它并将结果发回
  • 服务器有几个线程(主线程除外),从 1 到大约 100
  • 所有操作都在一台机器上,即客户端和服务器都使用 localhost
  • 传输的最大数据大小约为1 KB

一开始我已经实现了基于 epoll 的服务器:

  • 主线程使用epoll做IO,工作线程做数据处理
  • 所有服务器套接字都是非阻塞的
  • 服务器有两个队列:主线程发出客户端请求的传入队列,主线程获得回复的传出队列。

我的作品,但后来我又想到了那个设计:它没有考虑到 localhost。它更普遍,因此更复杂。做得比它更简单会很好。

所以:

  • 主线程执行 epoll_wait,接受并管理连接队列。连接队列是主线程放置已接受连接的队列
  • 监听套接字是非阻塞的。接受的套接字正在阻塞
  • 当任何套接字变为可读时,主线程唤醒工作线程,工作线程在阻塞模式下进行接收,在阻塞模式下处理和发送。

你怎么看待这件事?这样的设计够好吗?

感谢您的意见!

4

0 回答 0