这是一个更大的开销:每次创建一个新套接字或维护单个套接字进行数据传输

时间:2015-02-16 12:55:25

标签: python sockets networking

使用套接字发送数据的最佳方法是:

方法1:每次需要发送数据时创建一个新套接字,并在传输完成时关闭它。

方法2:使用相同的套接字而不是创建新套接字并在等待新数据时保持连接。

2 个答案:

答案 0 :(得分:4)

这取决于套接字的类型,但在通常情况下,除非资源非常有限,否则最好保留套接字。

  • UDP是无连接的,即您创建套接字并且由于发送数据包时的连接设置而没有延迟。但是仍然涉及系统调用和分配内存等,所以它很便宜但不是免费的。
  • TCP甚至需要建立连接才能开始发送数据。这样做的速度取决于延迟,即本地机器上的快速,本地网络中的速度较慢,互联网上的速度甚至更慢。此外,连接启动缓慢,因为尚未知道可用带宽。
  • 在TCP连接设置之上使用SSL / TLS更加昂贵,因为它需要在客户端和服务器之间进行更多的往返。

总结:如果您使用的是TCP,那么只有当您缺少必要的资源才能保持打开时,几乎总是更好地保持套接字打开并关闭它。一个好的折衷方案是只要你在套接字上有足够的活动就关闭套接字。这是通常使用HTTP持久连接完成的方法。

答案 1 :(得分:0)

这取决于。创建新套接字意味着两台计算机必须相互发现,因此需要进行名称查找,TCP / IP路由和资源分配。不是很便宜,但也不贵。除非您发送的数据超过10次/秒,否则您将无法注意到。

如果您打开套接字并且暂时不发送数据,则两台计算机之间的防火墙最终将确定此连接是陈旧的并且忘记它。您发送的下一个数据包将因超时而失败。

因此,两种方法的主要区别在于您是否可以在代码中正确处理超时情况。每次将数据写入套接字时都必须处理此问题。

在许多情况下,写入的代码在某处隐藏得非常深,并且代码实际上并不知道它写入套接字加上你将有多个地方写入数据,所以错误处理将泄漏到您的设计中。这就是为什么大多数人都喜欢每次创建一个新的插座,即使它有点贵。