【发布时间】:2015-12-11 17:44:35
【问题描述】:
我正在使用 SRWebSocket 在 iOS 中打开一个 websocket 连接。但是,如果我有时让应用程序处于空闲状态,则连接会自动关闭。之后,当我尝试发送任何数据时,websocket 连接失败。
在我手动断开连接之前,是否有办法让 websocket 连接保持活动状态?
【问题讨论】:
标签: ios websocket socketrocket
我正在使用 SRWebSocket 在 iOS 中打开一个 websocket 连接。但是,如果我有时让应用程序处于空闲状态,则连接会自动关闭。之后,当我尝试发送任何数据时,websocket 连接失败。
在我手动断开连接之前,是否有办法让 websocket 连接保持活动状态?
【问题讨论】:
标签: ios websocket socketrocket
我们需要间歇性地 ping 服务器(在我的情况下,我每 30 秒执行一次),以避免从服务器端关闭连接。
- (void)webSocketDidOpen:(SRWebSocket *)webSocket;
{
NSLog(@"Websocket Connected");
// Sending autoping to server
[self startConnectionCheckTimer];
}
// Checking for WSconnection by Sending Scheduled Ping
- (void)startConnectionCheckTimer {
if (!_timer) {
_timer = [NSTimer scheduledTimerWithTimeInterval:30.0f
target:self
selector:@selector(sendPing:)
userInfo:nil
repeats:YES];
}
}
- (void)stopConnectionCheckTimer {
if ([_timer isValid]) {
[_timer invalidate];
}
_timer = nil;
}
- (void)sendPing:(id)sender
{
[_webSocket sendPing:nil];
}
其中,_webSocket 是我的 SRWebSocket 对象, _timer 是 NSTimer 的一个对象。
【讨论】:
当应用程序保持空闲或应用程序进入后台时,Web Socket 会断开连接。你可以试试这个:
[UIApplication sharedApplication].idleTimerDisabled = YES
如果您的应用正在运行,则使用此选项将禁用将 iPhone 设置为空闲。
【讨论】: