微信小程序学习笔记(4)---webSocket

1.基础知识

(1)wx.connectSocket(Object object)
说明:
创建一个 WebSocket 连接。
参数:

属性类型默认值必填说明
urlstring开发者服务器 wss 接口地址
headerObjectHTTP Header,Header 中不能设置 Referer
protocolsArray/string子协议数组
tcpNoDelaybooleanfalse建立 TCP 连接的时候的 TCP_NODELAY 设置
perMessageDeflatebooleanfalse是否开启压缩扩展
timeoutnumber超时时间,单位为毫秒
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

返回值:SocketTask
(2)wx.sendSocketMessage(Object object)
说明:
通过 WebSocket 连接发送数据。需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。
参数:

属性类型默认值必填说明
datastring/ArrayBuffer需要发送的内容

还有三个属性是success,fail,complete同(1)
(3)wx.closeSocket(Object object)
说明:关闭 WebSocket 连接
参数:

属性类型默认值必填说明
codenumber1000(表示正常关闭连接)一个数字值表示关闭连接的状态号,表示连接被关闭的原因。
reasonstring一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于 123 字节的 UTF-8 文本(不是字符)。

还有三个属性是success,fail,complete同(1)

(4)四个监听事件:

事件说明参数
wx.onSocketOpen(function callback)监听 WebSocket 连接打开事件header(object类型,连接成功的 HTTP 响应 Header)
wx.onSocketMessage(function callback)监听 WebSocket 接受到服务器的消息事件data(string/ArrayBuffer类型,服务器返回的消息)
wx.onSocketClose(function callback)监听 WebSocket 连接关闭事件code(number类型,表示连接被关闭的原因)reason(string类型,表示连接被关闭的原因)
wx.onSocketError(function callback)监听 WebSocket 错误事件errMsg(string类型,错误信息)

(5)SocketTask
说明:
WebSocket 任务,可通过 wx.connectSocket() 接口创建返回
方法:

方法说明
SocketTask.send(Object object)通过 WebSocket 连接发送数据
SocketTask.close(Object object)关闭 WebSocket 连接
SocketTask.onOpen(function callback)监听 WebSocket 连接打开事件
SocketTask.onClose(function callback)监听 WebSocket 连接关闭事件
SocketTask.onError(function callback)监听 WebSocket 错误事件
SocketTask.onMessage(function callback)监听 WebSocket 接受到服务器的消息事件
2.demo

我们现在需要使用webSocket实现模拟彩票数据能实现实时刷新并且可以向服务端发送消息的例子

<!--index.wxml-->
<view class="container">  
       <button bindtap="send" plain>发送消息</button>  
       <input placeholder="请输入要发送的信息" value="{{value}}" bindinput="inputFunction"></input>  
       <button  bindtap="connect" plain>打开连接</button> 
       <button bindtap="close" plain>关闭连接</button>  
       <view wx:for="{{stocks}}" wx:for-index="index" wx:for-item="item">
             <text>{{item.name}}</text>                       
             <text class="{{status[index]}}">{{item.price}}</text> 
        </view>
</view>
/**index.wxss**/
.up{  
      color:red;
}
.down{  
      color:greenyellow;
 }
button{  
     margin:0;  
     padding:0;  
     width:200rpx;  
     height:80rpx; 
     margin-top:10rpx;  
     line-height:80rpx;  
     border-color:#dedede;
 }
//index.js
Page(
      {  
          data:{
              stocks:[{name:'软谋', price:100 },    
                      {name:'腾讯', price:110 },   
                      {name:'京东',price:50   } 
              ],  
              status:['','',''],   
              value:''  
          },  
          connect:function(){    
                var that=this;    
                var  stock= wx.connectSocket({      
                               url: 'ws://localhost:8080',    })                 
                stock.onMessage(function(Data){        
                      var data=JSON.parse(Data.data);       
                      var original=that.data.stocks;        
                      var status=['','',''];        
                      for(var i=0;i<original.length;++i){            
                            if(original[i].price<data[i].price){            
                                      status[i]='up';          
                            }else if(original[i].price>data[i].price){                   
                                      status[i]='down';          
                            }        
                      }       
                     that.setData({stocks:data,status:status})    
                 })  
          },  
          close:function(){    wx.closeSocket();  },  
          inputFunction:function(e){     
                  var str=e.detail.value;     
                  this.setData({value:str});  
         },  
         send:function(e){    
              var mes=this.data.value;    
              wx.sendSocketMessage({      data: mes,    }) 
         }
 })
//NodeJs--->服务器
const WebSocket=require('ws');
const wss=new WebSocket.Server({port:8080})
//模拟了三支股票
let stocks=[{
      name:'软谋',
      price:100
    },
    {
      name:'腾讯',
      price:110
    },
    {
      name:'京东',
      price:50
    }
  ];
function randomInterval(min,max){
 	return Math.floor(Math.random()*(max-min+1)+min);
}
function randomUpdate(){
	 for(var i=0;i<stocks.length;++i){
	      let randomValue=randomInterval(-50,50)/100;
	       stocks[i].price=((new Number(stocks[i].price)+randomValue).toFixed(2));
	 }
	 setTimeout(randomUpdate,2000);
}
randomUpdate();
wss.on('connection',function(ws){
	 setInterval(function(){
	        ws.send(JSON.stringify(stocks));
	 },2000);
	 ws.on('message', function (message){
	       console.log(message);
	 });
})

效果图:
demo

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值