这是我的服务器的样子:
-WorkerThread(s):
-IOThread(s)
问题是,该服务器不会发送所有排队的数据(它们留在 SendBuffer 中),并且“未发送”数据的数量随着客户端数量的增加而增长。为了测试我只使用 1 个工作线程和 1 个 iothread,但如果我使用更多似乎没有任何区别。访问全局缓冲区受 pthread_mutex 保护。此外,我的响应数据大小为 130k 字节(它至少需要 3 次发送调用才能发送此数据量)。另一方面是使用阻塞套接字的 Windows 客户端。
非常感谢!兆焦
编辑:
是的,默认情况下我正在等待 EPOLLOUT 事件,即使我没有什么可发送的。为了实现简单性和手册页指南,我是这样做的。另外,我对它的理解是这样的:
即使我当时“错过”了 EPOLLOUT 事件,我也不想发送任何内容,这也没有问题,因为当我想发送数据时,我会调用 send 直到 EAGAIN 和 EPOLLOUT 应该在将来触发(并且大部分时间)
现在我修改了代码以在 IN/OUT 事件之间切换:
在接受:
event.events = …Run Code Online (Sandbox Code Playgroud)