我正在开发一个Web应用程序,它有一个用Java编写的桌面客户端。我正在使用WebSockets在NodeJS服务器和Web客户端之间进行通信。
我正在尝试决定是否使用 WebSocket 或普通的 TCP 套接字在 NodeJS 服务器和桌面客户端之间进行通信。
据我了解,使用 WebSocket 会更容易,但重量也会重一点。
如何做出这个决定?
这取决于您的确切用例:
- WebSocket 是通过首先执行 HTTP 连接,然后将其升级到 WebSocket 协议来建立的。因此,交换第一条消息所需的开销比使用简单的套接字要高得多。但是,如果您只是保持连接打开并通过单个已建立的套接字交换所有消息,那么这并不重要。
- 由于屏蔽,性能开销很小。但这些主要是简单的计算(XOR(,所以它们应该没有太大关系。
- 由于成帧,它需要更多的带宽。但这应该并不重要。
- 从积极的方面来说,它与现有的防火墙和代理一起工作得更好(但并不总是完美的(,因此它可以更轻松地集成到现有基础架构中。您还可以更轻松地使用它与TLS,因为这只是HTTPS内部的WebSocket升级,而不是HTTP内部的WebSocket升级。
因此,如果您必须使用防火墙和代理集成到现有基础架构中,那么 WebSockets 可能是更好的选择。如果您的应用程序性能很高,并且需要每一点带宽、处理器时间和最低(初始(延迟,那么普通套接字会更好。
除此之外,如果延迟确实是一个问题(如实时音频(,那么您最好不要使用任何基于 TCP 的协议,如 TCP 套接字或 WebSockets。在这种情况下,最好使用 UDP 并处理应用程序内潜在的数据包丢失、重新排序和重复。
是否有适合您实现桌面客户端的任何技术的 WebSocket 库?websocket协议并非微不足道,它是一种相当新的技术,尚未得到普遍支持。当您必须使用纯TCP/IP套接字从头开始实现WebSocket时,您可以计划花费几天时间,直到基本协议实现正常工作并且可以开始在其上实现自己的协议(在那里,这样做了,在库可用的那一刻就扔掉了它,它比我自己的实现效果更好(。
但是,如果您能找到桌面客户端的 Websocket 实现,那么通过让网站和桌面客户端以相同的方式与节点后端通信,您可以在服务器端节省一些工作和复杂性.js。