Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SocketRocket连接在后台暂停_Ios_Objective C_Websocket_Nsoperation_Socketrocket - Fatal编程技术网

Ios SocketRocket连接在后台暂停

Ios SocketRocket连接在后台暂停,ios,objective-c,websocket,nsoperation,socketrocket,Ios,Objective C,Websocket,Nsoperation,Socketrocket,我正在使用,但我无法让它在后台传递消息。当我再次打开应用程序时,它会恢复连接(无需重新连接),所有消息都会立即出现 这是我的连接代码: - (void)_reconnect { _websocket.delegate = nil; [_websocket close]; NSString *host = @"ws://localhost:3030/primus"; NSMutableURLRequest *request = [NSMutableURLRequ

我正在使用,但我无法让它在后台传递消息。当我再次打开应用程序时,它会恢复连接(无需重新连接),所有消息都会立即出现

这是我的连接代码:

- (void)_reconnect {
    _websocket.delegate = nil;
    [_websocket close];

    NSString *host = @"ws://localhost:3030/primus";

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:host]];
    [request setValue:[NSString stringWithFormat:@"<%@>", apiKey] forHTTPHeaderField:@"Authentication"];

    _websocket = [[SRWebSocket alloc] initWithURLRequest:request];
    [_websocket setDelegateOperationQueue:[NSOperationQueue new]];
    _websocket.delegate = self;

    [_websocket open];

    if (DEBUG) {
        NSLog(@"Using: %@", host);
    }
}
线,但这没有任何帮助

你知道发生了什么事吗


谢谢

我面临着同样的问题,但仍然没有正确的答案

如果主线程被冻结(当应用程序处于后台时),Socket Rocket似乎会停止向指定的SRDelegate发送消息

我甚至尝试过另一种方法,但都没有成功:

    [_webSocket setDelegateDispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)];
然而,我确实找到了一个让主线程解冻的解决方法。 这不是很好,特别是因为它会导致电池耗尽,但它的工作

我注意到,如果应用程序在后台进行位置更新,WebSocket将继续正常运行

要启动定位服务,您可以在ApplicationIdentinterBackground上执行以下操作:

CLLocationManager* locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];
返回时,您可以通过调用应用程序上的以下代码来停止它们:

[locationManger stopUpdatingLocation];
Ofc您需要保持对locationManager的强烈引用,而不仅仅是在范围内


到目前为止,这不是一个推荐的解决方案,但如果什么都不起作用…

Hi只是表示正在处理同一问题。 新版socket rocket可以帮助解决这个问题。 现在支持某些后台模式


我还没有对此进行测试,但我相信这会有所帮助(使问题更接近最终解决方案)。

我正在使用最新版本的socket rocket,我仍然面临这个问题。使用“0.4.2”。告诉我,它起作用了。如果我没记错的话,从那时起苹果就不赞成在套接字上使用VoIP标志,所以目前它可能无法工作。根据我的经验,这是苹果公司的一个好决定,因为当应用程序被系统杀死时,它很容易达到状态,因为它经常被唤醒。当服务器实现不正确或使用多个带有VoiP标志的套接字时(在这种情况下,需要同步服务器),就会发生这种情况。唯一的选择是使用推送通知。
[locationManger stopUpdatingLocation];