[有偿] 原生 app 开发即时通讯 关于 websocket 长链接的问题

197 天前
 rcj6056

目前通过 httpclien.webSocketClient 来实现 websocket 的建链 通过 DefaultClientWebSocketSession 来接受服务端推送的消息 session.incoming.receive()

目前问题是 当 app 退出到后台 锁屏一段时间之后 app 被冻结了 再次打开 app 就会出现 Exception: java.net.SocketTimeoutException: timeout Exception: kotlinx.coroutines.channels.ClosedReceiveChannelException: Channel was closed 类似的异常

想请问这种情况怎么处理

ps 提供思路并解决的老哥有红包感谢:D

1382 次点击
所在节点   WebSocket
20 条回复
bmwh123
197 天前
有的国产安卓系统,会禁止长时间运行的应用 service,可能需要把你测试的 app 的安全设置或者自启管理之类的设置一下,还有就是可以使用两个服务互相调用的方式去保活
NessajCN
197 天前
每次从冻结回来肯定要 new 个新 socket client 对象啊,哪能还用之前那个
henyi2211
197 天前
断线自动尝试重连。
如果有状态数据要恢复,就加入会话机制;初次建立连接的时候,服务端发送会话 token 给客户端保存;重连时,尝试使用会话 token 恢复状态
tool2d
197 天前
手机锁屏 websocket 不是常规状态嘛,客户端重连一下就可以了啊。
rcj6056
197 天前
@bmwh123 项目启动了一个前台进程 在通知栏会有一个小图标 表示 app 还存活着
但是停留后台超过一定时间就会报 socket 的异常
JackCh3ng
197 天前
app 电池管理选择不优化,然后锁定后台。
一般像你这种需求是要上消息推送服务的。
okakuyang
197 天前
这就是安卓后台保活吧,我觉得基本无解。可以看看是不是省电模式或者手机优化程序干的。
JackCh3ng
197 天前
现在的安卓系统对于应用后台长期存在的 service 会在通知中心显式的提醒用户,这应该是安卓的隐私保护策略。然后还有个电池优化管理,会清掉后台不用的 app ,这会导致 app 的一些功能异常。我不是专业的安卓开发,这些是我之前写一个计时器 app 时遇到的问题,我是通过电池优化管理选择不优化来解决的。
coderxy
197 天前
保活别想了,老老实实做好重连就行了。
rcj6056
197 天前
@okakuyang 确实感觉很难搞 电池里面有个优化启动选项 有个开关
rcj6056
197 天前
@coderxy 好的 我试试
lty81372860
197 天前
IM 应用就接各大手机厂的官方推送服务吧,国内各家魔改的系统对于微信这种大体量应用是有白名单的,当然也不对外开放,所以想达到效果就接推送好了。
lty81372860
197 天前
实际你可以了解下商用的那些 IM SDK 是怎么保证效果的,最后殊途同归,都是调官方推送服务+调优过的长连接策略
gowas
197 天前
整个错误抑制 要有断线重连
lty81372860
197 天前
之前微信技术团队分享过一个他们对于长连接的调优文章,具体可以去他们公众号搜搜。
babyrjw
197 天前
感觉部分网络的 NAT 会不定期淘汰 NAT 表,淘汰后这 socket 就没用了,关键是 tcp 的中断检测也麻烦,发一条数据等超时才知道断开。 我以前遇到过在某一次心跳之后服务器发送数据到客户端失败,两边抓包发现客户端和服务器都会偶发性该问题,切换网络就正常
xiaoming61
197 天前
断线重连必须要有,光有前台服务不够。一些国产系统会在应用后台时禁止联网。
weeei
197 天前
退到后台就主动关闭长连接。切到前台重新连接。后台接收消息主要靠系统级别的推送。
ifbluethen
196 天前
前司用 uniapp 开发 MQTT 应用也是这个问题,最后只能销毁原有的,再新建重连。
hez2010
196 天前
开发即时通讯的推送消息难道不应该走平台的统一推送吗。。
Google 服务虽然被墙了但是 FCM 可没有被墙。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/985692

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX