【问题标题】:Winsock overlapped IO and message parsingWinsock 重叠 IO 和消息解析
【发布时间】:2013-01-13 12:02:08
【问题描述】:

我必须在 Windows 7 服务器上实现需要高吞吐量 (> 800Mbps) 和低延迟的(客户端)套接字。重叠 IO 似乎是实现高性能的方法。

阅读有关该主题的一些文档,据我所知,重叠 I/O 的优点是您将一些带有缓冲区的结构传递给操作系统,并在它们被填充时收到通知。

不,我想知道将其与基于数据包的协议(长度分隔的数据包,标头包含数据块的大小)结合起来的常用方法是什么 当然,我可以读取任意数据块并将所需的字节数复制到消息结构中。这意味着额外的复制操作。

第二个选项可能是将消息结构作为具有标头大小的缓冲区传递,在将其取回后再次传递相同的结构以读取请求的数据字节数。在这种情况下,第一次读取的块很小,但数据被保存到消息结构中,当数据块读取处于挂起状态时,可以初始化下一个头块的读取。

任何经验或想法如何最有效地处理长度分隔的数据包?

谢谢,

【问题讨论】:

  • 我会探索很多东西,但如果性能是您最希望的,如果您真的想要可扩展的性能,我会认为 IOCP 几乎是强制性的。你想出的任何其他东西都应该放在上面。

标签: c++ overlap winsock2


【解决方案1】:

如果您知道数据包大小,请查看scatter/gather I/O

【讨论】:

  • 谢谢...我会的。数据包大小取决于标头,并且可能因数据包而异。
  • 我想知道这一点。即便如此,如果您有一个合理的最大尺寸,您可能会从中获得效率提升。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多