微信小程序使用Socket的实例
微信小程序使用Socket的实例
首先,一个小程序同时只能有一个WebSocket连接,如果当前已经存在一个WebSocket连接,会关闭当前连接,并重新建立一个连接。
其次,如果使用了appID,协议必须是wss://...
最近团队用小程序做行情,在连接socket的时候,发现在还没有进行subscribe的情况下,就直接进行了广播,并且自动关闭了socket连接,
时间紧迫,抓耳挠腮,遂引用了socket-io(基于小程序的websocket仿写的socket-io,并非官方的socket-io,传送门),使用方法:
1、先在utils文件夹粘贴一个io的js
2、然后npminstallwxapp-socket-io
3、config文件夹下新建一个socket.js,对socket连接进行封装,如下:
constio=require('../utils/io.js')
leturl='wss://......'
letwsStatus=false
letonSocket=null
exportconstconnect=function(cb){
if(!onSocket){
onSocket=io(url)
onSocket.on('connect',function(res){
cb(true,onSocket)
wsStatus=true
})
setTimeout(function(){
if(!wsStatus){
cb(false,onSocket)
}
},10000)
}else{
cb(true,onSocket)
}
}
4、在要引用的页面调用,全局封装订阅方法
letopenSocket=require('../../config/socket')
letapp=getApp()
letsocket=null
Page({
data:{
zl:[[422,400,468,834,785,446,845,517,630,797,890,529,553,425,469,470,837,841,521,525],[422,400,468,834,785,446,845,517,630,797,890,529,553,425,469,470,837,841,521,525]]
},
onLoad:function(){
letthat=this;
//socket调用
openSocket.connect(function(status,ws){
if(status){
socket=ws
this.subscribe('zl')//对封装好对订阅方法进行调用
socket.on('broadcast',function(msg){//广播
console.log("broadcast");
console.log(msg);
})
}else{
alert("socket连接失败")
}
});
},
subscribe:function(type){
if(socket){
leteis=this.data[type]
if(eis&&eis.length>0){
letparam={//仅供参考,根据接口自行更改
eis:eis.join(',')
}
socket.emit('subscribe',JSON.stringify(param));
}
}
}
});
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!