1***@qq.com
1***@qq.com
  • 发布:2019-06-03 12:57
  • 更新:2019-06-05 12:42
  • 阅读:2642

BUG重点。连接A服务器成功之后,并且成功,关闭之后再次连接B服务器失败。使用connectSocket在app上返回的不是webSocket对象,网页端没问题。希望GM大大解答下,急求,谢谢

分类:uni-app

代码:socket = uni.connectSocket({
url: url,
complete: () => {}
});

在网页端返回的是webSocket对象,这样我可以做一系列操作,比如设置binaryType,
但是在app上返回的确是 {"CONNECTING":0,"OPEN":1,"CLOSING":2,"CLOSED":3,"readyState":0}这个对象,
希望官方给个答复。谢谢
如果app这样返回是对的,那么希望告诉下,我binaryType属性该怎么设置。

或者说下在没有FileReader对象的情况下,怎么把Blob数据类型转成arraybuffer也行。
BUG:连接A服务器成功之后,也进行了通讯,并且成功,然后调用uni.closeSocket({})关闭连接。
关闭之后再次连接B服务器,connectSocket的回调是成功回调,但是监听却是onSocketError,连接失败。
问题:连接A后在连接B在也连接不上
试过:1、在closeSocket方法的回调成功后在去连接B,测试不行(移动、H5都不行)
2、在closeSocket方法的回调成功后定时器3秒后在去连接B也不行(移动、H5都不行)
3、不调用closeSocket方法,直接连接B还是不行(移动不行)
4、在H5端不调用closeSocket方法,直接连接B居然行

前面是wss连接,

下面我换成ws连接测试
BUG2:安卓连接成功后,调用uni.sendSocketMessage发消息,报错:sendSocketMessage:fail WebSocket is not connected

BUG3:苹果模拟器第一次连接A没问题,断开后第二次也连接B成功了,但是我发送消息,就更石沉大海一样,没响应。我查看后端日志,根本没发过来。我猜想他是不是发给A了,但是他没连接A服务器,也发不过来啊

最后弱弱的问句,官方的WebSocket做成这样,为啥不集成下第三方的呢?或者告诉下用户有什么第三方的可以在uni-app里面用的呢?这搞得很多用户有着需求,弄的都想退坑了。这不是在砸您们自己的招牌吗?

2019-06-03 12:57 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com (作者) - sad

希望项目组的大佬解答下,不然项目做不下去了。急求

ZGH0709

ZGH0709

问题1: 不支持设置 binaryType,data 只支持 String/ArrayBuffer。

  • 1***@qq.com (作者)

    嗯,这也就算了,但是安卓真机测试连接不上。调用uni.connectSocket连接成功,但是又响应onSocketError说连接失败

    2019-06-04 14:00

  • 1***@qq.com (作者)

    还有就是,我用苹果模拟器测试没一点问题,用android测试,各种奇葩问题都来了。晕

    2019-06-04 15:02

  • 1***@qq.com (作者)

    能告诉下websocket有没有什么第三方在uni-app里面能用的?

    2019-06-04 15:03

ZGH0709

ZGH0709

Bug1, Bug2 均未复现: wss 与 ws 协议在功能方面应该表现是一致的,只是安全连接的区别。 连接 A 再连接 B,仍然正常,可以收发消息。android 连接成功,发送消息报错可能是 与服务端对协议处理不一致,可以参考: http://ask.dcloud.net.cn/question/71846。

ZGH0709

ZGH0709

Bug3 未复现: 用 ios 真机测试,连接 A 后连接 B, 发送接收消息均表现正常。建议用真机进行测试。

ZGH0709

ZGH0709

以上问题,建议先进行代码检查,再进行测试。如果仍有问题,请上传可复现 demo 。

  • 1***@qq.com (作者)

    找到原因了,binaryType没有设置为'arraybuffer',所以他发给服务端的数据时binary类型的"{\"@type\":\"binary\",\"base64\":\"AQAAS3sic3lzIjp7InR5cGUiOiJqcy13ZWJzb2NrZXQiLCJ2ZXJzaW9uIjoiMC4wLjEiLCJyc2EiOnt9LCJwcm90b1ZlcnNpb24iOjB9fQ==\",\"dataType\":\"ArrayBuffer\"}"

    但是正确的它应该发Buffer类型 {"type":4,"body":{"type":"Buffer","data":[0,2,28,99,111,110,110,101,99,116,111,114,46,101,110,116,114,121,72,97,110,100,108,101,114,46,108,111,103,105,110,123,34,97,117,116,104,95,99,111,100,101,34,58,34,102,98,55,49,57,52,51,48,45,56,54,57,51,45,49,49,101,57,45,57,98,54,102,45,98,102,57,55,97,52,102,57,53,50,53,98,34,44,34,97,112,112,95,117,105,100,34,58,34,49,56,56,54,56,52,50,53,48,55,48,34,44,34,112,119,100,34,58,34,87,101,49,48,48,49,49,34,125]}}

    虽然我知道怎么转换,但是后端框架要改的地方太多了。所以还是想问下,有什么办法设置arraybuffer,不然没办法通讯啊

    2019-06-05 09:32

  • ZGH0709

    回复 1***@qq.com: 你 send 的数据类型是什么? 你服务端接收的数据类型是什么? 要实现的需求是什么?

    2019-06-05 10:38

  • 1***@qq.com (作者)

    回复 ZGH0709: 要发送给后端是二进制数据类型。

    2019-06-05 11:24

  • 1***@qq.com (作者)

    回复 ZGH0709: 这么说,我后端用的是pomloe的ts版piuns搭建的后端,通讯协议是:pinus.connectors.hybridconnector

    2019-06-05 11:25

  • 1***@qq.com (作者)

    想问下大佬,该怎么弄,本来客户端我是拿RN的版本改了下,拿到uni-app上用。但是只要PC端网页版和苹果模拟器成功连接上了并进行了通讯。但是想测真机的时候,只测了安卓就连接不上,看了后端好像是发送过来的数据不对

    2019-06-05 11:27

  • 1***@qq.com (作者)

    回复 ZGH0709: 想问下大佬,该怎么弄,本来客户端我是拿RN的版本改了下,拿到uni-app上用。但是只要PC端网页版和苹果模拟器成功连接上了并进行了通讯。但是想测真机的时候,只测了安卓就连接不上,看了后端好像是发送过来的数据不对

    2019-06-05 11:28

ZGH0709

ZGH0709

首先:建议你回答问题。你说的数据不对问题可以这么理解吗: 你发送的 ArrayBuffer 数据, 后端接收后,数据就不是 ArrayBuffer 了?
其次:理清楚你想要问的问题,才能帮助更快的定位、解决。比如: 数据不对,是怎么不对的?预期呢,结果呢?

  • 1***@qq.com (作者)

    这么说,我发给后端的是ArrayBuffer类型数据,但是uni.send发送给后端的数据还包了一层Blob。

    2019-06-05 14:31

  • 1***@qq.com (作者)

    因为前端不能设置websocket的binaryType属性,binaryType属性默认值为Blob,导致后端接到的数据外层是Blob类型的数据。

    2019-06-05 14:37

  • 1***@qq.com (作者)

    或者你推荐一个功能全的并且适用移动、H5、微信小程序的websocket第三方包。因为后端我要改的话,比较麻烦,要改二进制的协议,而且也不知道怎么改,谢谢

    2019-06-05 15:02

  • ZGH0709

    回复 1***@qq.com: 你用 uni 的 API 在 H5 和 小程序上有问题没?跟这个问题一样吗?

    2019-06-05 15:07

  • 1***@qq.com (作者)

    回复 ZGH0709: H5上没一点问题,因为H5会返回一个_websocket引用,我可以直接设置binaryType属性,小程序没有测试。苹果模拟器倒是试过,处理接收数据的时候我要转一到,发送数据没问题。安卓真机测试的时候出现我说的问题,外层包裹了Blob导致后端解析出错

    2019-06-05 15:41

  • 1***@qq.com (作者)

    回复 ZGH0709: 所有说为什么处理H5,其他的不把webscoket的引用暴露出来?这样也省了你们好多事情不是?

    2019-06-05 15:44

  • 1***@qq.com (作者)

    回复 ZGH0709: 问下,为什么在网页端uni.connectSocket返回的是SocketTask,一个webScoket的引用。到了1移动端却不是,而是一个键值对的字典

    2019-06-05 21:10

  • 1***@qq.com (作者)

    回复 ZGH0709: 大佬,可以告诉下,我该怎么解决吗?

    2019-06-06 10:34

  • 1***@qq.com (作者)

    大胸弟,我这边改了后端协议了,但是移动端无法连接wss连接,是什么鬼?

    2019-06-08 16:36

该问题目前已经被锁定, 无法添加新回复