最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信小程序 SocketIO 實例講解

 更新時間:2016年10月13日 09:52:14   投稿:lqh  
這篇文章主要介紹了微信小程序 SocketIO 的相關資料,這里給大家提供了一個簡單實例,需要的朋友可以參考下

微信小程序 ScoketIO 簡單實例:

現在好的人在搞微信小程序,ScoketIO 是微信的網絡通信,它的重要性不言而喻,這里給大家講講如何使用以及注意事項!

微信小程序 的SocketIO 實現,基于CFETram 的實現基礎上完善

const emitter = require('./emitter.js');

/** socket.io 協(xié)議常量 */
var packets = {
  open:   0  // non-ws
 , close:  1  // non-ws
 , ping:   2
 , pong:   3
 , message: 4
 , upgrade: 5
 , noop:   6
};
var events = { 
  CONNECT: 0,
  DISCONNECT: 1,
  EVENT: 2,
  ACK: 3,
  ERROR: 4,
  BINARY_EVENT: 5,
  BINARY_ACK: 6
};

const PING_CHECK_INTERVAL = 2000;


class WxSocketIO {
  connect(url) {
    return new Promise((resolve, reject) => {
      wx.onSocketOpen((response) => {
        this.isConnected = true;
        //this.ping();
        resolve(response);
      });
      wx.onSocketError(error => {
        if (this.isConnected) {
          this.fire('error', error);
        } else {
          reject(error);
        }
      });
      wx.onSocketMessage(message => this._handleMessage(message));
      wx.onSocketClose(result => {
        if (this.isConnected) {
          this.fire('error', new Error("The websocket was closed by server"));
        } else {
          this.fire('close');
        }
        this.isConnected = false;
        this.destory();
      });
      wx.connectSocket({
        url: `${url}/?EIO=3&transport=websocket`
      });
    });
  }
  ping() {
    setTimeout(() => {
      if (!this.isConnected) return;
      wx.sendSocketMessage({
        data: [packets.ping, 'probe'].join('')
      });
    }, PING_CHECK_INTERVAL);
  }
  close() {
    return new Promise((resolve, reject) => {
      if (this.isConnected) {
        this.isConnected = false;
        wx.onSocketClose(resolve);
        wx.closeSocket();
      } else {
        reject(new Error('socket is not connected'));
      }
    });
  }
  emit(type, ...params) {
    const data = [type, ...params];
    wx.sendSocketMessage({
      data: [packets.message, events.EVENT, JSON.stringify(data)].join("")
    });
  }
  destory() {
    this.removeAllListeners();
  }
  _handleMessage({ data }) {
    const [match, packet, event, content] = /^(\d)(\d?)(.*)$/.exec(data);
    if (+event === events.EVENT) {
      switch (+packet) {
        case packets.message:
          let pack;
          try {
            pack = JSON.parse(content);
          } catch (error) {
            console.error('解析 ws 數據包失?。?)
            console.error(error);
          }
          const [type, ...params] = pack;
          this.fire(type, ...params);
          break;
      }
    }
    else if (+packet == packets.pong) {
      this.ping();
    }
  }
};

emitter.setup(WxSocketIO.prototype);

module.exports = WxSocketIO;

DEMO

項目附了一個微信小程序的DEMO 項目演示了接入 Scoket.IO 官方的演示聊天室,以便方便測試,關于詳細用法還請參考官方文檔。

How  to use

const opts = {}
const socket = this.globalData.socket = new WxSocketIO()
socket.connect('ws://chat.socket.io', opts)
.then(_ => {
 console.info('App::WxSocketIO::onOpen')
 console.info('App:onShow:', that.globalData)
})
.catch(err => {
 console.error('App::WxSocketIO::onError', err)
})
其中socket.connect(ws_url, opts)中,opts目前可選值是path,用來指定使用socket.io時默認的path,比如設置opts為下列值:

{
 query: 'fanweixiao',
 with: 'mia&una',
}

完整實例地址:https://github.com/fanweixiao/wxapp-socket-io

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

最新評論

澄迈县| 申扎县| 兰考县| 新民市| 高唐县| 南召县| 北京市| 泗阳县| 清苑县| 扎囊县| 靖边县| 白沙| 东阿县| 瓦房店市| 施甸县| 获嘉县| 疏附县| 定结县| 三穗县| 新余市| 金山区| 靖远县| 淮北市| 云林县| 保德县| 神木县| 灵石县| 岳阳县| 花莲市| 台江县| 文安县| 大足县| 安龙县| 南郑县| 陆良县| 泸州市| 济宁市| 招远市| 花莲县| 遵义县| 佛山市|