C++ 减少大容量intranet应用程序通信中的网络延迟

C++ 减少大容量intranet应用程序通信中的网络延迟,c++,optimization,networking,tcp,C++,Optimization,Networking,Tcp,我们有一套从设备/工具接收测量数据的服务器应用程序。消息传输时间是目前我们的主要瓶颈,因此我们有兴趣减少它以改进流程。工具和服务器应用程序之间的通信是通过在ReHATHING Linux上使用C++制作的TCP/IP套接字。p> 通过更改TCP/IP配置设置或调整TCP内核函数,是否可以使用硬件减少消息传输时间?(我们可以牺牲安全来换取速度,因为通信是在安全的内部网上进行的)如果可以,减少延迟的明显步骤是从TCP切换到UDP。是的 谷歌“TCP帧大小”了解详细信息。根据工作负载,禁用套接字连接会

我们有一套从设备/工具接收测量数据的服务器应用程序。消息传输时间是目前我们的主要瓶颈,因此我们有兴趣减少它以改进流程。工具和服务器应用程序之间的通信是通过在ReHATHING Linux上使用C++制作的TCP/IP套接字。p>
通过更改TCP/IP配置设置或调整TCP内核函数,是否可以使用硬件减少消息传输时间?(我们可以牺牲安全来换取速度,因为通信是在安全的内部网上进行的)

如果可以,减少延迟的明显步骤是从TCP切换到UDP。

是的


谷歌“TCP帧大小”了解详细信息。

根据工作负载,禁用套接字连接会有很大帮助

当处理大量的小消息时,我发现这有很大的不同

内存中,我认为C++的套接字选项称为“代码> tppNoTrime< /Cult>

< P>硬件侧尝试并确保(趾)启用。
<> P>还有一个重要的决定要在延迟之间进行,如果你想在好的花费上考虑更好的延迟,考虑减少中断聚结周期。有关更多详细信息,请参阅英特尔文档,因为它们提供了大量可配置参数。

正如@Jerry Coffin所建议的,您可以切换到。UDP是不可靠的协议,这意味着您可能丢失数据包,或者它们可能以错误的顺序到达,或者被复制。所以您需要在应用程序级别处理这些情况。由于您可能会丢失一些数据(如您在评论中所述),因此无需重新传输(任何可靠协议中最复杂的部分)。你只需要丢弃过时的数据包。使用简单的顺序编号,您就完成了

是的,你可以使用RTP(它有序列号),但你不需要它。对于您的简单案例而言,RTP看起来是一种过度杀伤力。它还有许多其他功能,主要用于多媒体流


[编辑]和类似的问题实际上可能会使性能恶化,因为TCP的速度通常比UDP快。与是否需要可靠性高度相关。我们可以丢失2-3%的数据,因为这是一个测量数据。RTP(实时协议)也可以使用吗?@Steve-o:有关于这种加速的信息吗?我无法想象这将如何实现,因为TCP主要(忽略一些次要的事情)是UDP上的一个重量级包装器@fruit_trader:关于RTP在单独的回答中好的回答不仅仅包括“用这个短语去谷歌”。Nagle的算法是TCP的重要组成部分,用一种语言默认禁用它是完全愤怒的。你不记得是哪种语言做的吗?但在这种特殊情况下,TCP_NODELAY将完成这项工作,所以+1@Andy我以为是PHP,但我刚刚回去回顾我一年前的原型代码,发现这个选项是由我正在使用的第三方类关闭的——当时我没有查到,因为我开始调查为什么我的C++套接字比PHP的慢。