我应该使用WebSocket还是普通的TCP Socket?

时间:2016-02-05 10:12:36

标签: node.js sockets tcp websocket

我正在开发一个具有用Java编写的桌面客户端的Web应用程序。我正在使用WebSockets在NodeJS服务器和Web客户端之间进行通信。

我正在尝试决定是使用WebSocket还是普通的TCP套接字在NodeJS服务器和桌面客户端之间进行通信。

据我了解,使用WebSocket会更容易,但重量也会更轻。

如何做出这个决定?

2 个答案:

答案 0 :(得分:5)

这取决于您的确切用例:

  • 通过首先建立HTTP连接然后将其升级到WebSocket协议来建立WebSockets。因此,交换第一个消息所需的开销大大高于简单的套接字。但是如果你只是保持连接打开并通过一个已建立的套接字交换所有消息,那么这并不重要。
  • 由于屏蔽,性能开销很小。但这些主要是简单的计算(XOR),因此它们无关紧要。
  • 由于框架,它需要更多的带宽。但这不应该太重要。
  • 从积极的方面来说,它与现有的防火墙和代理一起工作得更好(但并非总是完美),因此它可以更容易地集成到现有的基础架构中。您也可以使用TLS更轻松地使用它,因为这只是在HTTPS内部而不是在HTTP内部进行WebSocket升级。

因此,如果必须使用防火墙和代理集成到现有基础架构中,那么WebSockets可能是更好的选择。如果您的应用程序性能很高并且需要每一点带宽,处理器时间和最低(初始)延迟,那么普通套接字就更好了。

除了延迟确实是一个问题(如实时音频),你最好不要使用任何基于TCP的协议,如TCP套接字或WebSockets。在这种情况下,最好使用UDP并处理应用程序中潜在的数据包丢失,重新排序和重复。

答案 1 :(得分:1)

对于您在桌面客户端中实施的任何技术,是否有适当的WebSocket库? The websocket protocol并非微不足道,而且这是一项尚未得到普遍支持的新技术。当您必须使用纯TCP / IP套接字从头开始实现WebSocket时,您可以计划花费几天时间,直到您的基本协议实现正常工作,并且可以开始在其上实现您自己的协议(去过那里,完成了,扔了一个图书馆可用的时刻就比我自己的实施更好了。)

但是如果您可以为桌面客户端找到Websocket实现,那么通过让网站和桌面客户端以相同的方式与node.js后端通信,您可以在服务器端节省一些工作和复杂性。