2016-02-05 82 views
0

我正在开发一个具有用Java编写的桌面客户端的Web应用程序。我正在使用WebSockets在NodeJS服务器和Web客户端之间进行通信。我应该使用WebSocket还是普通的TCP套接字?

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

据我所知,使用WebSocket会比较容易,但也有点重。

如何做出这个决定?

回答

2

这取决于你的确切使用情况:

  • 的WebSockets被首先进行HTTP连接,然后升级这WebSocket协议建立的。因此,用简单的套接字交换第一条消息所需的开销要大得多。但是如果你只是保持连接打开并通过一个建立的套接字交换所有消息,那么这并不重要。
  • 由于屏蔽,性能开销很小。但这些主要是简单的计算(XOR),所以它们不应该太重要。
  • 由于成帧需要更多的带宽。但这不应该太重要。
  • 从积极的方面来看,它与现有的防火墙和代理服务器相比效果更好(但并不总是完美),因此它可以更轻松地集成到现有的基础设施中。您还可以使用TLS更轻松地使用它,因为这仅仅是HTTPS内部的WebSocket升级,而不是HTTP内部的升级。

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

除此之外,如果延迟真的是个问题(如使用实时音频),那么您最好不要使用任何基于TCP的协议,如TCP套接字或WebSockets。在这种情况下,使用UDP并处理应用程序内潜在的数据包丢失,重新排序和重复可能会更好。

1

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

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