Mac上websocket被关闭问题

最近在做Mac,windos上的音视频开发,遇到一个比较诡异的问题,在mac平台,使用libwebsocket后,只要没有信令的数据流动,一段时间后,websocket莫名其妙就被断了,分析了很久,都没找到原因。

即使加了ping,pong心跳,都维持不了链接,很多时候ping发出去,pong需要20s以上才返回,还找过服务端的同事一起协助排查,最终偶然发现,只要应用不再前台(失去焦点也算),就会出现,好了,有思路了,多半和mac上的应用生命周期有关系,研究了半天,发现这是触发了mac上的nap功能。

App Nap 是 OS X 10.9 Mavericks 的一项新功能。它能帮你在同时运行多个应用程序时节省电能。OS X
能够发现完全隐藏在窗口背后的应用程序。如果某个应用程序没有为你做任何事,比如播放音乐、下载文件或查收电子邮件,App Nap
会将该应用程序减速以节省宝贵的电池使用时间。不过,只要你再次使用该应用程序时,它就会立即恢复全速运行。这一切衔接得流畅无缝,你会以为它一直都是在运作的。App
Nap 也同样适用于 Safari 的标签页,只有看得到的标签页才会保持全速运行。通过 App Nap,处理器的能源消耗可以减少达 23%
之多。

简单的说,就是一旦应用失去了焦点,或者退到后台,还有其它类似没有使用音视频等条件,满足了Nap的触发机制,就会触发这个FP。然后系统会挂起你的进程达到省电,节约资源等目的。那么如何解决呢?其实系统也是提供了方法的,代码如下

@implementation AppDelegate {
    id <NSObject> _activity;
}

-(void)applicationDidFinishLaunching:(NSNotification *)notification {
    NSActivityOptions options = NSActivityUserInitiatedAllowingIdleSystemSleep;
    NSString *reason = @"No napping on the job!";
    _activity = [[NSProcessInfo processInfo] beginActivityWithOptions:options reason:reason];
}

-(void)applicationWillTerminate:(NSNotification *)notification {
    [[NSProcessInfo processInfo] endActivity:_activity];
    _activity = nil;
}

希望这个发现能节约你几天的时间

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WebSocket关闭可以通过监听WebSocket的onclose事件来实现。在JavaScript中,可以使用以下代码来关闭WebSocket连接并处理关闭事件: ``` WebSocket.onclose = (event) => { console.log(event.code); }; ``` 而在Java中,可以通过重写WebSocketListener的onClosed方法来关闭WebSocket连接并执行相应的操作。例如: ``` @Override public void onClosed(WebSocket webSocket, int code, String reason) { super.onClosed(webSocket, code, reason); // 根据状态码执行重连 if (code != 1000) { // 执行重连操作 } } ``` 通过这样的方式,你可以在WebSocket关闭时进行相应的处理,比如根据状态码进行重连操作。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [正确主动关闭websocket,异常关闭处理](https://blog.csdn.net/gao511147456/article/details/127887179)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [websocket 的创建与关闭](https://blog.csdn.net/qq_53810245/article/details/127900002)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值