一、什么是socket?
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socke
本章案例中我们使用HTML5中的webSocket。
websocket是HTML5开始提供的一种浏览器与服务器进行双向通讯的网络技术。
使用websocket浏览器和服务器只需要做一个握手的动作,然后浏览器和服务器之间就形成了一条快速的通道,两者之间就可以互相传送
好处:
节省资源:互相沟通的Header是很小的 大概是2bytes。
推送信息:不需要客户端请求,服务器可以主动传送数据给客户端
服务端代码
安装ws
cnpm install ws -S
const WebSocket = require(‘ws‘); //创建服务 const wss = new WebSocket.Server({ port: 8080 }); //当用户连接的时候回触发connection wss.on(‘connection‘, (client) => { //接收客户端消息 client.on(‘message‘, (data) => { //遍历所有用户,将接收到的消息发送给所有的用户 wss.clients.forEach((item) => { if (item.readyState === WebSocket.OPEN) { item.send(data); } }); }); });
客户端代码
相关API
wx.connectSocket
:创建一个WebSocket
连接
wx.onSocketOpen
:监听WebSocket
连接打开事件
wx.onSocketMessage
:监听WebSocket
接受到服务器的消息事件
wx.sendSocketMessage
:通过WebSocket
连接发送数据。需要先wx.connectSocket
,并在wx.onSocketOpen
回调之后才能发送
onLoad(){ //链接socket wx.connectSocket({ url: ‘ws://192.168.1.9:8080‘, header: { ‘content-type‘: ‘application/json‘ }, method: "get", success: (data) => { //如果链接成功,则监听 WebSocket 连接打开事件 if (data.errMsg == "connectSocket:ok") { //监听 WebSocket 连接打开事件 this.handleSocketOpen(); } } }) //接收服务端传递到客户端的消息 this.handleSocketMessage(); } //监听 WebSocket 连接打开事件 handleSocketOpen(){ wx.onSocketOpen(() => { //定义状态值,如果为true则表示监听成功 this.flag = true }) }, //接收服务端传递到客户端的消息 handleSocketMessage(){ wx.onSocketMessage((data) => { console.log(data); }) }, //向服务端发送消息 handleSend(e) { //如果监听WebSocket 连接打开事件成功则发送消息 if (this.flag) { wx.sendSocketMessage({ data: this.data.message, success: (data) => { console.log(data, 111); } }) } }