假设心跳间隔设置为5分钟(300秒),每个心跳包包含最小的TCP/IP头部(40字节)和最小的WebSocket帧头部(2字节),那么一天(86400秒)的流量大约是:
websocket一个数据帧最小为16位,两个字节。
如果心跳包不携带任何数据,每一分钟一个心跳,那么一小时是120字节,一天就是120*24=2880字节。大约3kB的流量。
以上为原来的回答
经过评论区各位同学的提醒,在原版的基础作如下优化:
由于websocket属于应用层协议 ,一个心跳包会经过传输层、IP层、链路层、物理层的封装,每一层都会带上各自的包头:
TCP层 :最小20字节
IP层: ipv4 最小20字节,ipv6 最小40字节,这里假设是ipv4
链路层 LLC头 :最小3字节
物理层 以太帧头:最小14字节。
由于以太帧存在最小帧的机制,一般为64字节,减去14字节的以太帧头与4字节的FCS,也就是以太帧中payload的(从链路层到应用层)总的长度,不小于46字节。
而物理层以上各层最小数据包: 2 + 20 + 20 + 3 < 46 ,将会在物理层补齐46字节 ,因此,一次websocket的心跳包最长为一个最小的以太帧: 64 字节。
每分钟一次心跳,一天总流量约等于:
24 * 60 * 64 ≈ 92160 字节 ≈ 90KB
如果算上服务端的响应包:92160 * 2 ≈ 184320 字节 ≈ 180KB