我正在尝试找出处理与 C++ TCP 服务器的多个连接的最佳方法。我偶然发现了 epoll()
,但遗憾的是它仅适用于 Linux,而我在 Windows 上执行所有操作。
经过一些研究,在 Windows 上处理套接字的最佳方法似乎是使用 I/O 完成端口。我想使用它们,但是客户端应用程序使用 send()
和 recv()
(我无法更改它),这意味着我还需要使用相同的函数来向客户端发送和接收数据。这些函数似乎不用于 IOCP(而是使用 WSASend()
/WSARecv()
)。
我想知道是否还有办法将 IOCP 与 send()
和 recv()
结合使用?或者我应该研究其他方法?
最佳答案
I also need to use the same functions to send to and receive data from the client
这是不正确的。客户端不知道如何将数据传入和传出 TCP 连接,无论哪种方式,完全相同的 TCP 段都会通过网络发送。
如果您的服务器受 I/O 限制,那么 WSAAsyncSelect
和/或 WSAEventSelect
可以很好地工作(并为您省去多线程的麻烦)。仅对于计算密集型服务才值得使用 IOCP,因为它们将工作项分发到可用线程,以便并发请求可以启动并在多个处理器核心上进行计算。
WSAPoll
是另一种选择。
关于c++ - 将 IOCP 与 send() 和 receive() 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35234060/