Websocket在真机下,服务器主动断开连接时无法获取code和reason

  • Creator 版本:2.4.7
  • 目标平台:IOS / Android

在浏览器环境下,websocket的onclose方法中,可以获取到服务器主动断开连接时的code和reason,但在原生平台下(IOS / Android / 模拟器),这个值就成了undefined

看看2410的修改列表 估计对你有帮助

2410的修改列表看了下,是解决了调用close导致的崩溃
我这个问题是,在原生下,onclose的event,比web环境下少了很多参数…

好的,翻到原生层的实现看了一下,原生层直接没管closeCode和closeReason这两个东西,简单来说,服务器主动断开下发的code和reason,是不会传给js端的,客户端带着code和reason断开连接,实际上服务器也是收不到的。自己把ios的处理了一下,但是android端用的是libwebsockets,实在有点看不懂,不知道在哪里收到这两个东西

https://github.com/cocos/cocos-engine/pull/12370 可以先参考一下

多谢大佬~先看看

大佬请问一下,在安卓端,看到服务器主动断开连接时,客户端这边是给js端传了一个固定的code和reason,有没有什么办法可以在这里拿到服务器断开时下发的code和reason呢

onSocketCallback的参数列表中有个reason, 你试试看通过传递这个lws_callback_reasons给利用上?

试了下,当reason 是LWS_CALLBACK_WS_PEER_INITATED_CLOSE的时候,in里面会传递回来服务器下发的code和reason

感谢你富有价值的回复. 方便截个图看看in里面的值吗? 我们考虑之后对这块优化一下

好的,这两天太忙了,抽出空来截图一下~ 文字描述就是,前两个byte是固定的code,后面是reason

请问android有方法获取服务器下发的code和reason了吗?

楼主你好,我也遇到了相同的问题。在原生平台拿到的event的数据结构如下:
{
type: “close”,
target:{
“url”: “xxxxx:20102”,
“URL”: “xxxxxx:20102”,
“protocol”: “”,
“__jsb_ref_id”: 149,
“CLOSED”: 3,
“OPEN”: 1,
“CLOSING”: 2,
“CONNECTING”: 0,
“extensions”: “”,
“bufferedAmount”: 0,
“readyState”: 3}
}

请问你后面是怎么拿到对应的code和reason的

这个问题解决了么?24年了,我也遇到同样问题