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