Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 每个消息创建新TCP连接的性能影响_Performance_Sockets_Networking_Service_Tcp - Fatal编程技术网

Performance 每个消息创建新TCP连接的性能影响

Performance 每个消息创建新TCP连接的性能影响,performance,sockets,networking,service,tcp,Performance,Sockets,Networking,Service,Tcp,在过去,我们的服务器应用程序是这样设计的:客户机创建一个TCP连接,无限期地建立此连接,并在需要时发送消息。这些消息可能以高容量突发方式出现,或者在这两者之间有较长的空闲时间。我们现在正在切换到一个不同的连接协议,客户端将为每条消息创建一个新的连接,然后在发送后断开连接 我有几个问题: 我知道三次握手建立连接会有一些开销。但是,这种开销是否显著(cpu、内存、带宽等) 已建立的TCP连接空闲数分钟,传输消息的延迟与创建新连接并发送消息的延迟之间是否存在差异 如果我试图确定与旧连接协议相比,切换到

在过去,我们的服务器应用程序是这样设计的:客户机创建一个TCP连接,无限期地建立此连接,并在需要时发送消息。这些消息可能以高容量突发方式出现,或者在这两者之间有较长的空闲时间。我们现在正在切换到一个不同的连接协议,客户端将为每条消息创建一个新的连接,然后在发送后断开连接

我有几个问题:

  • 我知道三次握手建立连接会有一些开销。但是,这种开销是否显著(cpu、内存、带宽等)

  • 已建立的TCP连接空闲数分钟,传输消息的延迟与创建新连接并发送消息的延迟之间是否存在差异

  • 如果我试图确定与旧连接协议相比,切换到此新连接协议对性能的影响,是否还有其他因素/注意事项需要考虑


  • 非常感谢您的帮助。

    打开和关闭大量TCP会话可能会影响连接跟踪防火墙和负载平衡器,导致它们速度减慢,甚至失败并拒绝连接。有些,如Linux iptables conntrack,对于跟踪的连接数具有中等的默认值

    如果程序循环消息太快,可能会耗尽可用的本地端口号。在套接字被视为“关闭”之前,存在TCP超时。通常有一个操作系统计时器来清理这些关闭的连接。如果太多插槽打开得太快,操作系统可能没有时间清理

    握手会给您的带宽成本增加大约80字节。TCP连接关闭还涉及FIN或RST数据包,尽管这些标志可能与数据包组合


    如果为消息发送方启用Nagle算法,则已建立TCP会话中的延迟可能会稍微高一点。Nagle使操作系统在发送部分填充的数据包之前等待更多数据。正在关闭的TCP会话将刷新所有数据。在打开的会话中,可以通过禁用Nagle与TpPyNoTrime< /Calp>Fig.

    相同的效果,您也应该考虑每次消息被触发时启动三路握手的延迟影响,为什么要这样做?你走错方向了。几十年来,其他所有人都在疯狂地将连接池添加到他们的应用程序和中间件层。握手需要三个最小大小为40字节的TCP段,总共120个,最后一个可以在数据上进行。@EJP:在两端还有两个F数据包。握手仍然是三个段。闭合鳍段和它们的支架是另外四个支架,所有这些支架都可以搭载。@EJP:yes。修正为80字节。