WebSocket数据消耗

15

我目前正在为一个涉及Web服务器和一些树莓派的项目学习。 挑战基本上就是在Web界面上观察树莓派的“状态”。

树莓派通过GSM连接(主要是3G)连接到互联网。我正在使用Node.js开发客户端和服务器,并希望通过socket.io使用Websockets观看树莓派连接状态(实际上,这更像是观看树莓派通过我的应用程序上传数据的能力),处理“已连接”和“未连接”事件。

始终保持Websocket连接对于这种用例是否可靠? Websocket是否设计或可靠地保持打开状态?由于这是一个难以测试的情况,是否有人知道始终保持Websocket所需的数据消耗估计?如果我走错了路,是否有人曾经通过其他可靠方式处理过这种用例?


“data-consumption estimate for an always-alive websocket” 是什么意思? - micnic
WebSockets旨在保持开放状态。我已经在GSM上实现了这一点,并且效果非常好。TCP会为您处理可靠性问题。数据消耗取决于您传输的数据,仅用于连接的数据量不是很大。 - deyhle
@micnic,我的意思是以位/字节为单位的数据。在这里,对于大型车队来说,数据可能会变得很昂贵,因此我们尽可能将GSM数据订阅进行缩减。 - Cyril CHAPON
@deyhle,谢谢你提供的信息。实际上,这只是为了保持连接而已,但我在某处读到“心跳”可能会消耗资源。我只是想知道一个消耗的“范围”,比如每天1kB、1MB。你认为这个数量微不足道吗? - Cyril CHAPON
1个回答

20

始终保持WebSocket连接对于这种使用情况可靠吗? WebSocket是否被设计为(或可靠于)保持打开状态?

是的,WebSocket被设计为保持打开状态,并且对于您的使用情况是可靠的,WebSocket连接只是传输数据的TCP连接。

由于这是一个难以测试的情况,是否有人知道始终保持活动状态的WebSocket的数据消耗估计值?

正如我所写的,WebSocket连接中的数据使用帧来传输,每个帧都有一个头部和有效载荷。从客户端发送到服务器的数据始终是掩码的,并且像这样,每个帧都会添加4个字节(掩码密钥)。标头的长度取决于有效载荷的长度:

  1. 对于小于等于125字节的有效载荷,标头为2个字节
  2. 对于小于等于65535字节的有效载荷,标头为4个字节
  3. 对于小于等于2^64 -1字节的有效负载,标头为10个字节(很少使用)

基本编组协议:https://www.rfc-editor.org/rfc/rfc6455#section-5.2

为保持连接打开状态,服务器会在特定的超时时间(取决于实现,通常约30秒)发送“ping”帧,其长度为2-127字节,通常为2个字节(仅标头,没有有效载荷),客户端则响应“pong”帧,也是2-127字节长。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接