Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序

Real-Time Apps with WebSocket, Socket.IO, and DerbyJS

实时程序的使用变得越来越广泛,如传统的交易,游戏,社交,开发工具DevOps tools, 云服务,新闻。

之所以如此是因为技术的进步。更大的带宽用来传输数据和更多的计算来处理和取回数据。

HTML5的新实时连接标准叫做,WebSocket

在浏览器,JavaScript给你一个对象WebSocket。这个对象是一个类,它有各类方法用于生成WebSocket protocol client。

WebSocket协议(ws://)不和HTTP或者HTTPS区别非常大。

因此,开发者需要一个特别的ws server。仅仅有一个HTTP server是不够的.(having a HTTP server won't cut it.)

并且你知道,Node.js是一个高效率,非块结构的输入输出平台。

使用Node执行implementing WebSocket servers非常好,因为Node是非常快速的也因为Node是JavaScript,  就像WebSocket clients(比如browser JavaScript)。

因此, Node非常适合当一个后端对儿,和browser和它的WebSocket API。

为了开始你的WebSocket和Node.js, 让我们keep things simple stupid,并学习下面的内容:

  • 什么是WebSocket
  • Native WebSocket and Node.js with ws module example
  • Socket.IO and Express.js example
  • Collaborative online editor example with DerbyJS, Express.js, and MongoDB

What Is WebSocket?

WebSocket是一个特殊的关联频道channel: 浏览器(客户端)和服务器。

它是一个HTML5协议。

WebSocket的连接是持续的constant。而传统的HTTP请求总是由客户端发起,这意味着服务器有更新时,没法通知客户端(除了Server-side Events)。

WebSocket通过保持客户端和服务器的双向连接,更新就会被及时发出,而无需客户端to poll(通过投票/提问等方式来获得民意,轮询--定时/轮流的询问:客户端向服务器定时发送请求)。

详细的解释见:

http://www.websocket.org/aboutwebsocket.html

在现代浏览器使用WebSocket无需特定的库。

不同server端的API推荐表:

https://stackoverflow.com/questions/1253683/what-browsers-support-html5-websocket-api

其中node,使用Socket.IO(45000✨最高)

再说一句,轮询poll也可以用于web apps的实时响应(这是过去的技巧)。

一些高级库如Socket.IO会在WebSocket不能使用时,回退到轮询的方式。比如出现连接问题或者用户的浏览器版本太低。

轮询相对简单,本章不讲。它可以执行使用一个setInterval()回退函数和一个服务器上的终端。尽管如此,polling不是真正的实时连接,它的每个请求都是separate。


 

Native WebSocket and Node.js with the ws Module Example

猜你喜欢

转载自www.cnblogs.com/chentianwei/p/10339318.html