Tho*_*mas 63 tcp keep-alive websocket
WebSockets 可以选择将ping发送到另一端,另一端应该用pong响应.
收到Ping帧后,端点必须发送Pong帧作为响应,除非它已经收到一个关闭帧.它应该尽快响应Pong框架.
[Y]你向对等体发送一个keepalive探测包,其中没有数据,并且ACK标志打开.您可以这样做是因为TCP/IP规范,作为一种重复的ACK,并且远程端点将没有参数,因为TCP是面向流的协议.另一方面,您将收到来自远程主机的回复(根本不需要支持keepalive,只需TCP/IP),没有数据和ACK设置.
我认为TCP keepalive效率更高,因为它可以在内核中处理而无需将数据传输到用户空间,解析websocket框架,制作响应框架,然后将其交回内核进行传输.它也减少了网络流量.
此外,WebSockets 被明确指定为始终在TCP上运行; 它们不是传输层不可知的,因此TCP keepalive始终可用:
WebSocket协议是一种独立的基于TCP的协议.
那么为什么人们会想要使用WebSocket ping/pong而不是TCP keepalive?
use*_*421 64
TCP keepalive的问题是:
Mat*_*247 41
除了EJP的答案,我认为它也可能与HTTP代理机制有关.Websocket连接也可以通过(HTTP)代理服务器运行.在这种情况下,TCP keepalive只会检查到代理的连接,而不是端到端连接.
vto*_*ola 20
http://www.whatwg.org/specs/web-apps/current-work/multipage/network.html#ping-and-pong-frames
.3.4 Ping和Pong帧
WebSocket协议规范定义了Ping和Pong帧,可用于保持活动,心跳,网络状态探测, 延迟检测等.这些目前尚未在API中公开.
用户代理可以根据需要发送ping和未经请求的乒乓帧,例如,尝试维护本地网络NAT映射,检测失败的连接,或向用户显示延迟度量.用户代理不得使用ping或未经请求的pongs来帮助服务器; 假设服务器将在适合服务器需求时请求拨打.
WebSocket在开发时考虑了RTC,所以当我看到ping/pong功能时,我也看到了一种测量延迟的方法.pong必须返回与ping相同的有效负载,这使得发送时间戳非常方便,然后计算从客户端到服务器的延迟或反之.
小智 15
TCP keepalive不会通过Web代理传递.websocket ping/pong将通过网络代理转发.TCP keepalive旨在监督TCP端点之间的连接.Web套接字端点不等于TCP端点.websocket连接可以在两个websocket端点之间使用多个TCP连接.
归档时间: |
|
查看次数: |
40556 次 |
最近记录: |