ccc程序 切换到后台 心跳包就发不出去了(网络模块是js的websocket)

听说貌似网络模块用js无法直接解决这个问题? 那么只能自己写一套缓存、或者恢复机制了吗?有不有直接的解决方案呢?

1赞

我也想知道这个问题如何解决

我想知道C++或者lua就没这个情况了么

发不出去ok吧,服务器刚好做超时断开的逻辑啊.

你做原生也发不出去啊。。。兄弟

原生的为什么发不出去呢 可以建立一个服务 或者前台的进程

后台了前台就停了啊。。除非你后台常驻,那最多也就安卓可以,ios不行。

服务端主动发心跳包ping,手机到后台也会主动pong的,这样就能维持不断线

iOS 后台应该是执行不了这样的逻辑的,只能使用 Apple 自己有限的一些服务。

这些都是手机平台出于功耗,性能的考虑做出的限制,不可能绕过的,常规的做法都是像 @ayang008 从服务端来检查断线,否则一个已经把应用放到后台完全不用的用户,对你的服务器来说不也是无意义的负载么?

心跳就是为了检测断开的。从后台回到前台第一时间检测到心跳超时了就重连

1赞

难道不是服务端发现一个客户端多久没响应就主动断线么?

1赞

是的,服务器发现一个客户端在一定时间内没有发送任何数据(正常数据和心跳包),就会主动断开这个客户端,我目前采用的解决方案是 自动重连,并且缓存最后一次发送失败的数据,自动重连上就发送出去

@1245617757 lz有解决吗?请问下客户端怎么知道连接断掉了?

我用的websocket,它是有onError事件的