美文网首页程序员小程序实践
小程序websocket遇到的几个小问题

小程序websocket遇到的几个小问题

作者: 想溜了的蜗牛 | 来源:发表于2020-08-18 10:52 被阅读0次

1. websocket 发送信息问题

在发送信息给服务器时,网上好多代码都将要发送的信息用 JSON.stringify(msg) 转了一下。这里要明白它为什么要转,当你发的是一个对象时,做这个操作是将对象转为字符串;而发送的是一个字符串时,就不能转了,因为再转一下就将是双层的双引号了,服务器收信息将解析不了。

2. websocket 通讯收信息的回调处理

websocket与设备在几个页面中都需要通讯,这样不同页面时,需要定义不同的 发送/接收 设备返回信息的处理方法。有种做法是将这个回调处理写到  getApp().globalData 对象内。在需要处理的 page 中 onShow 方法中重写这相应的方法。参考这篇文章 https://www.xncoding.com/2017/12/15/weixin/ma-websocket.html  。但个人觉得这个还是不太好,准备抽离出一个类,在要单独定义接收响应方法的页面中。

3. 小程序展示 base64图片和H5一样, 如下

You need to specify correct Content-type, Content-encoding and charset like

data:image/jpeg;charset=utf-8;base64,

according to the syntax of the data URI scheme:

data:[<media type>][;charset=<character set>][;base64],<data>

以上内容参考自 https://stackoverflow.com/a/8499679/7624626, 需要修改的是你要展示的图片文件类型。

4. websocket 服务器使用base64发送图片给小程序时,返回为ArrayBuffer类型,将其转为base64 string 使用下面方法:

function _arrayBufferToBase64( buffer ) {

    var binary = '';

    var bytes = new Uint8Array( buffer );

    var len = bytes.byteLength;

    for (var i = 0; i < len; i++) {

        binary += String.fromCharCode( bytes[ i ] );

    }

    return window.btoa( binary );

}

方法来自stackoverflow: https://stackoverflow.com/a/9458996。 简书的这个代码引用功能真的太low了,渣渣,跟我写的流水账一样。

5. 上面还有一个问题, 小程序并不支持 btoa 这种方法,需要你引入一个polyfill, 项目地址:https://github.com/davidchambers/Base64.js

相关文章

网友评论

    本文标题:小程序websocket遇到的几个小问题

    本文链接:https://www.haomeiwen.com/subject/wdvqjktx.html