移植Parse-SDK-JS到微信小程序之旅:websocket

这部分比之前的requestlocalStorage还要难点,不过还是顺利移植过来了。

因为微信小程序的websocket只允许一条连接,所以复杂情况下还没进行测试,尚未发现有什么bug。

脚本定位

文件:/src/LiveQueryClient.js
函数:_getWebSocketImplementation
代码:

    if (process.env.PARSE_BUILD === 'node') {
      return require('ws');
    } else if (process.env.PARSE_BUILD === 'browser') {
      return typeof WebSocket === 'function' || typeof WebSocket === 'object' ? WebSocket : null;
    } else if (process.env.PARSE_BUILD === 'react-native') {
      return WebSocket;
    }

原理分析

可以看到,在不同的执行环境下,返回不同的WebSocket对象,但这些都不是微信小程序支持的。
所以我们需要重写一个简单的WebSocket对象

编写代码


class WxSocket {
  constructor (url) {
    wx.connectSocket({
      url
    });

    wx.onSocketOpen((ret) => {
      this.onopen && this.onopen(ret);
    });

    wx.onSocketError(err => {
      this.onerror && this.onerror(err);
    });

    wx.onSocketMessage(msg => {
      this.onmessage && this.onmessage(msg);
    });

    wx.onSocketClose(() => {
      this.onclose && this.onclose();
    })
  }

  send (data) {
    wx.sendSocketMessage({
      data
    })
  }

  close () {
    wx.closeSocket();
  }

  onopen () {}
  onerror (error) {}
  onclose () {}
  onmessage (event) {}
}

然后在上边的_getWebSocketImplementation函数,直接返回WxSocket对象即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 第一章 Nginx简介 Nginx是什么 没有听过Nginx?那么一定听过它的“同行”Apache吧!Ngi...
    JokerW阅读 32,803评论 24 1,002
  • 前端开发面试知识点大纲: HTML&CSS: 对Web标准的理解、浏览器内核差异、兼容性、hack、CSS基本功:...
    秀才JaneBook阅读 2,570评论 0 25
  • 好种子开花 一早红燕姐给我打电话来接我一起去上课,额滴神啊,幸福从天降 到了课堂,带的披肩薄了点,隔壁的姐姐就把她...
    西红柿的小姑娘阅读 270评论 0 2
  • 《金文诚〈孟子〉学习笔记306,8-13,离娄章句下13》 【孟子曰:"养生者不足以当大事,惟送死可以当大事。"】...
    金吾生阅读 408评论 0 0