求教 WebSocket 可否设置超时时长?

如题.求教 @jare @panda

解决个毛线 又快一个月了 只是换了一个ios的ws实现 其他的什么也没有 wss 超时 对象销毁太慢 等等 一个都没解决 就会说 等1.6 1.6 … 1.6也没说搞定这些 我真是醉了. 有空开什么沙龙 没空写几百个字的文档.

WebSocket标准中并没有timeout的设置接口。
https://developer.mozilla.org/en-US/docs/Web/API/WebSocket

你可以自己本地做个心跳包检测一下,如果心跳包超过多少时间没收到回复,则手动关闭websocket实例。

从调用close 到回调 onclose 需要花费30秒 加上超时 约45秒… 这期间还不能重新建立连接 不然直接报错…

有这问题,我也碰到了。

你是用1.6beta么?在iOS平台和android平台都出现么?

1.4.2 1.5.2 都有这个问题 不区分 ios 和 安卓 .超时时间也是30秒左右,怀疑造成onclose花费30秒 就是因为超时时间照成的.

搞个小demo发给我吧,我查一下。

临时解决方案:当你检测到超时,调用close后,直接调用onclose函数,onclose内部最好有个标志位控制一下,防止执行多次。

close 后 new个新的 socket 不就好了

建议在wifi,移动3G,移动4G,苹果,安卓等不同机型做测试,在wifi下问题出得比较少。

new不了 报错 因为之前的没有释放完成 这个时间很久

ws.onclose 是close 完成后 回调 直接调用的意义是什么?

你应该有一些流程控制的逻辑放在onclose吧?

逻辑就是重新尝试连接 但是这个时候不能开始连接 会报错 因为还没释放

直接上传个重现demo吧。

这个怎么给你Demo 你直接建立一个ws 连接到服务器 把服务器关了或者开启防火墙 发送信息 要30秒后才onclose 这期间你还不能建立连接到另外一台服务器

服务器关闭,会直接触发客户端的onclose回调的啊。这个之前验证过的。

你可能只在本地wifi验证,没在很复杂的网络环境下试过。

关闭的意思 不是关闭服务器 是直接切断网络连接 类似于实际掉线的情况.物理链路断开的情况.