小程序是一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验。这是关于小程序websocket
之旅。websocket
是html5定义的一种新协议,原理就是在客户端(浏览器)和服务器之间建立一条专用通道连接,二者可以实时通信,类似于我们日常里的打电话一样。
一个小栗子
以实现一个股票走势图的功能为例,我们都知道股票这个东西的实时性和准确性是很重要的,一般可以使用ajax
轮询(setinterval
函数)的方式来解决,可以每半秒轮询一次数据接口,再渲染页面视图。但是这个方式是有一些缺点的,比如,浏览器要时刻不断的向服务器发送数据请求并且接受数据,这样很消耗带宽,还很容易把服务器给搞卡死了。
对于websocket
技术来说,客户端就与服务器之间建立了一个专用通道,他们之间的数据通信就不需要轮询可以一直进行数据交互,服务器不再是被动的返回数据,而是有了新数据之后就会主动的推送给客户端。websocket
很适合对实时性要求的场景,实时性不高还是用ajax就可以实现了。
快速生成标准文件
以charts为例,只需要在app.json文件下添加路劲,保存之后就会自动生成文件夹。
1 | <!-- app.json文件 --> |
前期准备
1、小栗子试图插件
图表类的插件一般就是echarts
和highcharts
,而在小程序里,我们可以使用wxcharts
,wxcharts
的实现方式是canvas,小程序本身也是支持的。把js文件放到charts文件下,下载链接
2、数据接口支持
这里的数据支持使用的是Nodejs
,还要了解一下websocket
,它其实就是web版的socket技术。因为浏览器支持的javascript语言并不支持socket,所以在html5技术标准中新添加了这项特性。用通俗的话语解释就是:socket其实就是在浏览器和服务端各开辟一个专门的端口,双方都监听这个端口,然后互相发送和接收数据。
Nodejs有个插件封装了socket,叫nodejs-websocket
。使用npm安装一下:npm install nodejs-websocket
1 | ➜ ~ npm i nodejs-websocket -g |
server.js
1 | var ws = require('nodejs-websocket'); |
websocket
建立专用通道后,服务端只要监听到客户端发来的文本内容是”stock”,就每隔2s修改一次数据,修改后的数据,客户端(浏览器)马上就会监听到,利用这种方式来模拟股票数据的变化。
注意
利用webstorm的run或使用命令行运行脚本后,websocket的协议是ws协议和wss协议。
ws就相当于http,wss就相当于https,所以正确的写法应该是:ws://localhost:8000
微信客户端
使用websocket很容易,主要就是你这几个步骤:
- 建立连接
- 发送数据
- 接收数据
- 结束
charts.js
1 | // pages/charts/charts.js |
charts.wxml:
1 | <!--pages/charts/charts.wxml--> |
看下控制台,只有一次请求而已,没有像轮询那样一坨一坨的发请求了。
下面通过控制台,看下websocket请求的特征: