我已经使用 IO 完成端口实现了一个高效的 Windows 服务器,现在我需要实现一个新的跨平台服务器 - 可能使用 select
我在 Windows 中的设计基于从 IO 完成端口队列中获取消息的 X 工作线程,其中 X 是一个取决于硬件和项目属性的数字。
然而,在 linux 中,没有 IO 完成端口。我想保留我的设计/使用领导者-从者设计来接受或读取套接字。我环顾四周,似乎选择是唯一的方法。
(如果我理解正确,使用 select 等同于使用 WaitForMultipleObjects)所以我的设计应该是这样的:
- 创建线程池
- 所有线程等待选择函数,所有客户端套接字读取句柄,侦听套接字接受句柄。
- 当一个新的套接字连接时,以某种方式提醒其他线程更新它们的选择函数句柄
打破选择以更新新客户似乎有点肤浅。有没有更好的办法?
有人可以指出一个套接字服务器的高性能实现的例子吗?