省流量!web socket+node.js+socket.io 实现长轮询

阅读时长 4 分钟读完

省流量!web socket+node.js+socket.io 实现长轮询

随着智能手机普及和数据流量贵的趋势,越来越多的用户开始考虑如何节省流量。对于移动端网站而言,长轮询可以很好地实现数据及时更新,但也意味着需要频繁地向服务器请求数据,增加了数据的传输量,进而增加了流量的消耗。那么如何既能保证数据的实时更新,同时又能减少请求的次数呢?

此时,web socket 及其 node.js 的应用就可以帮助我们解决这个问题。

Web Socket 和长轮询的异同

Web Socket 是 HTML5 中新增的协议,它是一种全双工的通信协议,能够实现客户端和服务器之间的实时双向通信。而长轮询则是一种提高实时性的技术手段,现在被广泛应用于移动端的网页上。Web Socket 和长轮询的最大的区别就是:WebSocket 是基于一个持久化的 TCP 连接实现的,而长轮询则是通过一次次的 HTTP 请求来模拟实时通信。

相比于长轮询,Web Socket 更加高效并且具有更好的实时性。而且,Web Socket 还有一个优点,就是它基于事件的驱动模式,只有在有数据传输时才会发送数据,否则会一直等待,避免了不必要的数据请求,也就节省了数据流量。

Socket.IO 帮助您快速应用 Web Socket 技术

要利用 Web Socket 实现双向实时通信,需要开发者掌握一定的 Web Socket 技术,并且需要合理设计和使用其 API。不过,我们可以利用 Socket.IO 这个强大的 JavaScript 库来快速应用 Web Socket 技术。

Socket.IO 是由 Learnboost 公司开发的且兼容浏览器和服务器的实时应用开发工具,它可以让我们快速地实现 Web Socket 技术,并提供了完善的 API 支持。下面我们一起来看一下如何使用 Socket.IO 和 node.js 实现 Web Socket 的长轮询:

  1. 服务器端代码

首先,我们在 node.js 中创建一个服务器,并使用 Socket.IO 作为其 Web Socket 实现:

-- -------------------- ---- -------
--- --- - -------------------------------------
--- -- - --------------------------
-----------------

-------- ------- ----- ---- -
  -------------------
  --------------- ---- -- -------------
-

------------------- -------- -------- -
  ------------------- -------- ------ -
    ------------------
    -- -- -- ---------
  ---
---
  1. 客户端代码

接下来,我们在客户端上实现 Web Socket 长轮询,让它定时向服务器发出请求,监听更新数据:

-- -------------------- ---- -------
--- ------ - ------------------------------------

-----------------------
  --------------------- --------------
-- -----

-------------------- ---------- -
  -------------------------
---

----------------------- ---------- -
  ----------------------------
---

------------------- -------------- -
  ------------------
  ---- -- ---------
---

这里,我们每 2 秒向服务器发出一次请求(emit('update', 'updateData'))。在连接成功后,我们也添加了连接和断开连接时的回调函数。同时,我们使用了 on() 函数监听服务器上传输的数据。这里需要注意的是,此处的回调函数,只有在有数据传输时才会触发,否则会一直等待,这就避免了不必要的数据请求,节省了数据流量。

总结

通过 web socket+node.js+socket.io 实现长轮询,既实现了 Web Socket 的高效率和实时性,又降低了数据流量的消耗。当然,还有许多其他灵活、高效的 Web Socket 应用方式,有兴趣的读者可以进一步研究、学习。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6653a32dd3423812e480d8ec

纠错
反馈