收藏
回答

xmpp类库Strophe?

我使用了Strophe.js库,更改了里面的new Websocket为wx的websocket相关动作,本以为更换了套接字就ok,没想到strophe.js只能正常链接,缺没法登录验证,求解

回答关注问题邀请回答
收藏

3 个回答

  • C
    C
    2020-06-18

    有现成的Strophe.js,求一个,感谢,我用的代码片段全是错误无法调试


    2020-06-18
    有用
    回复
  • 苏苏
    苏苏
    2019-10-31
    var me = this;
     
        this.socket = {
          onopen: this._onOpen,
          onmessage: this._connect_cb_wrapper,
          onerror: this._onError,
          onclose: this._onClose,
          send: function (str) {
            wx.sendSocketMessage({ data: str });
          },
        };
     
        function creatSocket() {
          if (_socketTask) {
            console.log('有sockettask了。。。')
            _socketTask.close();
            _socketTask = undefined;
          }
     
          setTimeout(() => {
            var SocketTask = wx.connectSocket({
              url: me._conn.service, 
              protocols: ['xmpp']
              // fail: function (e) {
              //   console.log('连接失败', e)
              //   me._conn._changeConnectStatus(Strophe.Status.CONNFAIL, null);
              //   //部分机型从后台切回前台状态有延迟
              //   if (e.errMsg.indexOf('suspend') != -1) {
              //     creatSocket()
              //   }
              // },
              // success: function (e) { 
              //   console.log('连接成功', e)
              // }
            });
            _socketTask = SocketTask;
     
            _socketTask.onOpen(function (res) {
              console.log("WebSocket 连接已打开!");
              isSocketConnnected = true
              // wx.sendSocketMessage({
              //   data: JSON.stringify({ id: 'csq@10.4.0.66' }),
              // })
              me.socket.onopen.call(me);
              me._conn._changeConnectStatus(Strophe.Status.CONNECTED, null);
            });
            _socketTask.onMessage(function (msg) {
              //console.log("onSocketMessage", msg, JSON.stringify(msg));
              me.socket.onmessage.call(me, msg);
            });
            _socketTask.onClose(function (e) {
              console.log("WebSocket 连接已经关闭!",e);
              isSocketConnnected = false
              me._conn.connected = true;
              me.socket.onclose.call(me);
              // 外部回调,需要设计一个更合适的
              me._onSocketClose && me._onSocketClose(e);
              me._conn._changeConnectStatus(Strophe.Status.DISCONNECTED, e);
            });
            _socketTask.onError(function (e) {
              console.log('出错了 出错了')
              me.socket.onclose.call(me); 
            })
     
          }, 1000)
        }

        creatSocket();

    参照了一下环信的api。
    正常情况下,会有5个消息。
    现在只有一个。

    2019-10-31
    有用
    回复 9
    • 卢霄霄
      卢霄霄
      2019-10-31
      https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html
      做个这种可以跑起来,能复现你问题的代码片段,我才能帮你调试
      2019-10-31
      回复
    • 卢霄霄
      卢霄霄
      2019-10-31
      看你好像是在内网做的呢。。可能没法调试哦。。我这边没有xmpp服务器可以测的。。
      2019-10-31
      回复
    • 苏苏
      苏苏
      2019-10-31回复卢霄霄
      如果有teamview,烦请帮忙
      2019-10-31
      回复
    • 卢霄霄
      卢霄霄
      2019-10-31回复苏苏
      不方便远程呢。。你发出去的消息有哪些呢?也打印下哎
      2019-10-31
      回复
    • 苏苏
      苏苏
      2019-10-31回复卢霄霄
      这个是请求建立以后,服务器会转发两条消息。我在小程序端和web端接收到的都是两条,但是差异还是不少的。
      前两张图片是普通web端打印的。后两张是小程序端打印的。
      2019-10-31
      回复
    查看更多(4)
  • 卢霄霄
    卢霄霄
    2019-10-31

    有代码片段吗?

    2019-10-31
    有用
    回复 10
    • 苏苏
      苏苏
      2019-10-31
      https://developers.weixin.qq.com/s/3gMgUwmX7Wcz
      2019-10-31
      回复
    • 苏苏
      苏苏
      2019-10-31
      第一张是小程序的,第二张是web的
      2019-10-31
      回复
    • 卢霄霄
      卢霄霄
      2019-10-31回复苏苏
      那没问题的啊 是你收到challenge之后没回 response啊
      2019-10-31
      回复
    • 卢霄霄
      卢霄霄
      2019-10-31回复苏苏
      我想我知道原因了。。小程序里没有 atob和btoa方法,你要自己去百度个实现写到strophoe.js里
      2019-10-31
      回复
    • 苏苏
      苏苏
      2019-10-31
      代码没有提示错误,我得在strophoe.js哪里写这个
      2019-10-31
      回复
    查看更多(5)
登录 后发表内容
问题标签