WebSockets ping / pong,为什么不进行TCP keepalive?

汤玛士

WebSockets可以选择向另一端发送ping,而另一端应该以Pong响应。

收到Ping帧后,端点必须发送Pong帧作为响应,除非它已经接收到Close帧。在实际可行的情况下,应使用Pong框架进行响应。

TCP以keepalive形式提供类似的内容:

[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?

洛恩侯爵

TCP keepalive的问题是:

  1. 默认情况下它是关闭的。
  2. 默认情况下,它每隔两个小时运行一次,而不是Ping / Pong协议提供的按需运行。
  3. 它在代理之间操作而不是端到端。
  4. 正如@DavidSchwartz指出的那样,它在TCP堆栈之间而不是在应用程序之间运行。

与WebSockets ping / pong的比较没有意义。TCP keepalive是自动的,并且在启用时是定时的,而WebSocket ping / pong是根据应用程序的要求执行的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

HTTP KeepAlive可以代替TCP KeepAlive吗?

来自分类Dev

默认的TCP KeepAlive设置

来自分类Dev

如何使用Python Websockets库在“ ping”调用中获得“ pong”响应?

来自分类Dev

TCP Keepalive不起作用

来自分类Dev

在Mac上卷曲TCP Keepalive

来自分类Dev

TCP keepalive是否刷新NAT上的超时?

来自分类Dev

tcp-keepalive在ssh中如何工作?

来自分类Dev

NFS是否会覆盖TCP Keepalive时间?

来自分类Dev

ping ping localhost是什么?

来自分类Dev

为什么ping IP与ping网站不同?

来自分类Dev

为什么要在结尾而不是开头调用GC.KeepAlive?

来自分类Dev

为什么NodeJS KeepAlive似乎无法正常工作?

来自分类Dev

为什么要在结尾而不是在开头调用GC.KeepAlive?

来自分类Dev

对于繁忙的TCP套接字,是否需要TCP Keepalive?

来自分类Dev

如何在Twisted中使用TCP Keepalive与端点?

来自分类Dev

使用TCP KeepAlive检测套接字断开连接

来自分类Dev

是否可以在Apple iOS设备上激活TCP Keepalive

来自分类Dev

使用TCP KeepAlive检测套接字断开连接

来自分类Dev

检测对等方是否正在使用TCP Keepalive(Windows)

来自分类Dev

跨NodeJS中的多个提取命令进行Keepalive

来自分类Dev

为什么ping这么慢?

来自分类Dev

使用websockets进行节点集群

来自分类Dev

.net的GC.KeepAlive的Java等效语言是什么?

来自分类Dev

SPA:仅使用websockets。为什么不?

来自分类Dev

Tornado Websockets不会在没有ping的情况下调用on_message

来自分类Dev

为什么在while循环内对未知主机进行ping操作?

来自分类Dev

为什么在while循环内对未知主机进行ping操作?

来自分类Dev

为什么ping终止后会有ping输出?

来自分类Dev

Sinatra 将数据从 TCP 传递到 websockets

Related 相关文章

热门标签

归档