微信小程序web源码-微信小程序WebSocket协议说明及使用示例分享

本文介绍了微信小程序WebSocket协议说明和使用示例,通过实例帮助我们快速熟悉和使用它。

什么是WebSocket(简要说明)

微信的WebSocket接口与HTML5的WebSocket基本相同。 它是HTTP协议的升级。 作为一种新的Socket,用在B/S上。 它实现了浏览器和服务器之间的全双工通信。

因为这是一个小程序,所以我不会过多解释WebSocket的底层和协议,只是简单介绍一下。 想了解更多关于WebSocket的知识,请参考以下内容:

WebSocket协议

WebSocket 和 Ajax 之间的选择

在WebSocket出现之前,通常使用Ajax来实现即时通讯,Ajax通过轮询的方式获取实时数据。 轮询是在指定的时间间隔内发出HTTP请求来获取数据,而这种方法会有一些缺点。 一方面,产生过多的HTTP请求,占用带宽,增加服务器的响应微信小程序web源码微信小程序web源码,浪费资源。 另一方面,因为并不是每个请求都会有数据变化(就像聊天室一样),所以会导致请求的利用率较低。

WebSocket可以解决以上缺点。 WebSocket 在客户端和服务器之间建立通道。 该请求只需请求一次,就可以从同一个通道实时获取服务器的数据。 因此,当应用于实时应用时,WebSocket 是一个非常好的选择。

WebSocket 协议名称

WebSocket链接不是以http或https开头,而是以ws和wss开头。 这里你需要注意。

示例:交易信息实时显示

这类似于实时查看股票信息。 这里用到了图表插件wxchart。

wxchart插件地址:

基本上就这些了,让我们正式开始吧。

添加库存页面:

微信小程序源码搭建教程_微信小程序web源码_微信小程序源码免费下载

将wxchart.js放入pages/stock/中。

修改stock.wxml:

stock.js 代码:

// pages/stock/stock.js
//加载插件
var wxCharts = require('wxcharts.js');
Page({
  data: {},
  onLoad: function (options) {
    //建立连接
    wx.connectSocket({
      url: "ws://localhost:12345",
    })
    //连接成功
    wx.onSocketOpen(function() {
      wx.sendSocketMessage({
        data: 'stock',
      })
    })
    //接收数据
    wx.onSocketMessage(function(data) {
      var objData = JSON.parse(data.data);
      console.log(data);
        new wxCharts({
          canvasId: 'lineCanvas',//指定canvas的id
          animation: false,
          type: 'line',//类型是线形图
          categories: ['2012', '2013', '2014', '2015', '2016', '2017'],
          series: [{
            name: '交易量',
            data: objData,//websocket接收到的数据
            format: function (val) {
              if (typeof val == "string") {
                val = parseFloat(val);
              }
              return val.toFixed(2) + '万元';
            }
          },
          ],
          yAxis: {
            title: '交易金额 (万元)',
            format: function (val) {
              return val.toFixed(2);
            },
            min: 0
          },
          width: 320,
          height: 200
        });      
    })
    //连接失败
    wx.onSocketError(function() {
      console.log('websocket连接失败!');
    })
  },
})

登录后复制

这里WebSocket的地址是ws://localhost,端口是12345,连接成功后,将股票发送到服务器,然后服务器向小程序提供数据信息。

我用 PHP 编写了 WebSocket 的服务器端。 我将其发布在这里供您参考:

sockets;
          $write = NULL;
          $except = NULL;
          socket_select($socketArr, $write, $except, NULL);
          foreach ($socketArr as $socket){
            if ($socket == $this->master){
              $client = socket_accept($this->master);
              if ($client log("socket_accept() failed");
                continue;
              }else{
                $this->connect($client);
              }
            }
            else{
              $this->log("----------New Frame Start-------");
              $bytes = @socket_recv($socket,$buffer,2048,0);
              if ($bytes == 0){
                $this->disconnect($socket);
              }else{
                $user = $this->getUserBySocket($socket);
                if (!$user->handshake){
                  $this->doHandShake($user, $buffer);
                }else{
                    $buffer = $this->unwrap($user->socket, $buffer);
                    //请求为stock时,向通道内推送数据
                    if ($buffer == 'stock') {
                        $arr = array();
                        //模拟数据
                        for ($i=0; $i send($user->socket, json_encode($arr));
                    }
                }
              }
            }
          }
        }
    }
}
$s = new WebSocket2('localhost', 12345);
$s -> run();

登录后复制

用PHP写WebSocket有点麻烦。 如果你了解 Node.js,你可以用 Node.js 来编写它。 Node.js很方便编写后端WebSocket。

效果示例:

微信WebSocketAPI参数说明

wx.connectSocket(OBJECT)

[tr] 参数类型必需的描述[/tr]

网址

细绳

是的

开发者服务器接口地址必须是wss协议,域名必须是后台配置的合法域名。

数据

目的

请求的数据

标头

目的

HTTP Header、Referer 不能在 header 中设置

方法

细绳

默认为 GET,有效值为:OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT

微信小程序web源码_微信小程序源码免费下载_微信小程序源码搭建教程

成功

功能

接口调用成功的回调函数

失败

功能

接口调用失败回调函数

完全的

功能

接口调用结束时的回调函数(无论调用成功还是失败都会执行)

wx.onSocketOpen(回调)

监听WebSocket连接打开事件。

wx.onSocketError(回调)

监听 WebSocket 错误。

微信小程序源码搭建教程_微信小程序web源码_微信小程序源码免费下载

wx.sendSocketMessage(OBJECT)

通过WebSocket连接发送数据,需要先wx.connectSocket,然后在wx.onSocketOpen回调后发送。

[tr] 参数类型必需的描述[/tr]

数据

字符串/数组缓冲区

是的

需要寄什么东西

成功

功能

接口调用成功的回调函数

失败

功能

接口调用失败回调函数

完全的

微信小程序源码免费下载_微信小程序web源码_微信小程序源码搭建教程

功能

接口调用结束时的回调函数(无论调用成功还是失败都会执行)

wx.onSocketMessage(回调)

侦听 WebSocket 从服务器接收的消息事件。

[tr] 参数类型说明[/tr]

数据

字符串/数组缓冲区

服务器返回的消息

wx.closeSocket()

关闭 WebSocket 连接。

wx.onSocketClose(回调)

监听 WebSocket 关闭。

关于本地主机

这是本地主机的描述。 上面的代码中,我使用了localhost的本地请求。 这只是一个占位符。 编程中不支持本地主机本地请求。 大家应该注意这一点。