3

我正在使用 SRWebSocket 在 iOS 中打开 websocket 连接。但是,如果我有时让应用程序处于空闲状态,则连接会自动关闭。之后,当我尝试发送任何数据时,websocket 连接失败。

在我手动断开连接之前,有没有办法让 websocket 连接保持活动状态?

4

2 回答 2

3

我们需要间歇性地 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 的对象。

于 2015-12-11T06:26:27.397 回答
2

当应用程序保持空闲或应用程序进入后台时,Web Socket 会断开连接。你可以尝试使用这个:
[UIApplication sharedApplication].idleTimerDisabled = YES

如果您的应用程序正在运行,使用此选项将禁用 iPhone 空闲。

于 2015-12-10T12:27:24.143 回答