weex下使用websocket,怎么传输二进制数据?

问题出现的环境背景及自己尝试过哪些方法

之前网页下使用socket.binaryType = "arraybuffer";
或者各客户端原生环境下的socket都支持传输二进制数据如:protobuf都没有问题。
但是安卓下weex默认不提供websocket的实现,需要自己写adapter,幽默坑的是提供的接口IWebSocketAdapter默认认的send接口参数为String,
void send (void String var1),onMessage(String var1)
难道weex真要沦为了KPI的玩意??
安卓下使用weex的websocket需要特殊处理下?转base64??### 问题描述

相关代码

// js
class ChatController {
  constructor({ socket } = {}) {
    super();
    this.socket = socket;
    this.socket.binaryType = "arraybuffer";
    this.openSocket();
  }
  openSocket() {
    this.socket.WebSocket(wsURL);
    this.socket.onmessage = (data) => this.receive(data);
    this.socket.onopen = (options) => console.log('opened connection');
    this.socket.onerror = (data) => console.error(data);
  }


  send(message) {
    this.socket.send(message);
  }
}

你期待的结果是什么?实际看到的错误信息又是什么?

以上代码在浏览器下执行的时候没有问题

clipboard.png

但在安卓下的JAVA代码里处理成{"@type":"binary","base64":"","dataType":"ArrayBuffer"}

// WebSocketAdapter
@Override
    public void send(String data) {
        WXLogUtils.i("WebSocketAdapter", data);
        if (ws != null) {
            try {
                Buffer buffer = new Buffer().writeUtf8(data);
                ws.sendMessage(WebSocket.PayloadType.BINARY, buffer.buffer());
                buffer.flush();
                buffer.close();

                wsEventReporter.frameSent(data);
            } catch (Exception e) {
                e.printStackTrace();
                reportError(e.getMessage());
                wsEventReporter.frameError(e.getMessage());
            }
        } else {
            reportError("WebSocket is not ready");
        }
    }
阅读 3.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进