哪个开销更大:每次创建一个新套接字或维护一个套接字进行数据传输
Which is a larger overhead: Creating a new socket each time or maintaining a single socket for data transfer
使用套接字发送数据的最佳方法是:
方法一:每次需要发送数据时新建一个socket,传输完成后关闭
方法二:使用同一个套接字,而不是创建一个新的套接字,即使在等待新数据时也保持连接。
这取决于。创建新套接字意味着两台计算机必须相互发现,因此涉及名称查找、TCP/IP 路由和资源分配。不是很便宜但也不是那么贵。除非你发送的数据超过 10times/second,否则你不会注意到。
如果您将套接字保持打开状态并且一段时间不发送数据,两台计算机之间的防火墙最终会判定此连接失效并忘记它。您发送的下一个数据包将因超时而失败。
所以这两种方法的主要区别在于您是否可以在代码中正确处理超时情况。每次将数据写入套接字时,您都必须处理这个问题。
在许多情况下,要编写的代码隐藏在某个地方很深,并且代码实际上并不知道它正在写入套接字,而且您将有多个地方写入数据,因此错误处理将泄漏到您的设计中。这就是为什么大多数人喜欢每次都创建一个新套接字,即使它有点昂贵。
这取决于套接字的种类,但在通常情况下,除非您的资源非常有限,否则最好保留套接字。
- UDP 是无连接的,即您创建套接字并且在发送数据包时不会因为连接设置而延迟。但是仍然涉及系统调用和分配内存等,所以它很便宜但不是免费的。
- TCP 需要先建立连接,然后才能开始发送数据。完成的速度取决于延迟,即在本地机器上快,在本地网络上慢,在互联网上更慢。此外,连接开始缓慢,因为可用带宽未知。
- 在 TCP 连接设置之上使用 SSL/TLS 甚至更昂贵,因为它需要客户端和服务器之间的更多往返。
总结:如果您使用的是 TCP,您几乎总是最好保持套接字处于打开状态,只有在您缺少保持套接字打开所需的资源时才关闭它。一个好的折衷方案是只要套接字上有足够的 activity 就关闭套接字。这是通常使用 HTTP 持久连接完成的方法。
使用套接字发送数据的最佳方法是:
方法一:每次需要发送数据时新建一个socket,传输完成后关闭
方法二:使用同一个套接字,而不是创建一个新的套接字,即使在等待新数据时也保持连接。
这取决于。创建新套接字意味着两台计算机必须相互发现,因此涉及名称查找、TCP/IP 路由和资源分配。不是很便宜但也不是那么贵。除非你发送的数据超过 10times/second,否则你不会注意到。
如果您将套接字保持打开状态并且一段时间不发送数据,两台计算机之间的防火墙最终会判定此连接失效并忘记它。您发送的下一个数据包将因超时而失败。
所以这两种方法的主要区别在于您是否可以在代码中正确处理超时情况。每次将数据写入套接字时,您都必须处理这个问题。
在许多情况下,要编写的代码隐藏在某个地方很深,并且代码实际上并不知道它正在写入套接字,而且您将有多个地方写入数据,因此错误处理将泄漏到您的设计中。这就是为什么大多数人喜欢每次都创建一个新套接字,即使它有点昂贵。
这取决于套接字的种类,但在通常情况下,除非您的资源非常有限,否则最好保留套接字。
- UDP 是无连接的,即您创建套接字并且在发送数据包时不会因为连接设置而延迟。但是仍然涉及系统调用和分配内存等,所以它很便宜但不是免费的。
- TCP 需要先建立连接,然后才能开始发送数据。完成的速度取决于延迟,即在本地机器上快,在本地网络上慢,在互联网上更慢。此外,连接开始缓慢,因为可用带宽未知。
- 在 TCP 连接设置之上使用 SSL/TLS 甚至更昂贵,因为它需要客户端和服务器之间的更多往返。
总结:如果您使用的是 TCP,您几乎总是最好保持套接字处于打开状态,只有在您缺少保持套接字打开所需的资源时才关闭它。一个好的折衷方案是只要套接字上有足够的 activity 就关闭套接字。这是通常使用 HTTP 持久连接完成的方法。