WebSockets和轮训实现之间的差别

如果你曾经使用过一种服务器端语言和一种数据库构建过一个网页聊天室,你会很想知道WebSockets和传统方式实现之间的差别。

  传统聊天室通常是使用轮询方法实现的。客户端周期性地向服务器询问是否有更新。服务器回复给客户端更新的数据或者没有更新。然而,传统方法有以下问题。只有客户端主动询问服务器才能从服务器获得更新的数据。这意味着更新的数据会周期性延迟而且服务器的应答不够及时。如果我们想通过减少轮询过程来改进这个问题,则需要更大带宽,因为客户端需要不间断地向服务器发送请求。

  下图展示了客户端和服务器之间的请求。它表明许多无用请求被发送了,然而服务器向客户端回复的内容中并没有新数据。 

  长轮询是一种更好的轮询方法。客户端向服务器发送请求并等待回复。而不是传统轮询方法中服务器回复"no update"且服务器只有当需要将信息推送到服务器时才回复。在这种方法中,服务器可以不管何时有更新都可以推送信息到客户端。一旦客户端收到服务器的应答,它构建另一个请求并等待下一个服务器的推送。下图展示了长轮询,客户端询问更新,服务器只有在有更新时才回复:

  在WebSockets方法中,请求数目大大少于轮询方法。这是因为客户端和服务器的连接是永久的。一旦连接建立,只有信息更新时,客户端或者服务器端才发送请求。举例,客户端想向服务器更新信息时就向服务器发送信息。服务器只有需要推送给客户端更新数据时才向客户端发送消息。在连接中,没有无用请求发送。因此,只需要更小的带宽。下图展示了WebSockets方法:

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。