socketrocket连接在背景中暂停



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

这是我的连接代码:

- (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);
    }
}

我也没有尝试过

[_websocket setDelegateOperationQueue:[NSOperationQueue new]];

行,但这无济于事。

您知道发生了什么事吗?

谢谢!

我正在面对同样的问题,但仍然没有正确的答案。

,如果主线程被冻结时,插座火箭似乎停止向分配的srdelegate发送消息(当应用程序在后台时)。

我什至尝试过没有成功的其他方法:

    [_webSocket setDelegateDispatchQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)];

但是,我确实找到了使主线程未透明的解决方法。这不是很好,尤其是因为它会导致电池排干,但是可以工作。

我注意到,如果您的应用程序在后台时具有位置更新,则Websocket继续运行正常。

为了启动位置服务,您可以在ApplicationDendenterBackground上进行以下操作:

CLLocationManager* locationManager = [[CLLocationManager alloc] init];
[locationManager startUpdatingLocation];

回来时,您可以通过在应用程序WillenterForeground上调用以下代码来阻止它们:

[locationManger stopUpdatingLocation];

ofc,您将需要强烈参考locationmanager,而不仅仅是在范围内。

这不是迄今为止推荐的解决方案,但是如果什么都没有起作用...

hi刚刚说明在同一问题上工作。新版本的插座火箭可以帮助解决此问题。现在支持一些背景模式。请参阅源代码。

我还没有测试过,但我敢肯定这应该有所帮助(使事情更接近最终解决方案)。

相关内容

  • 没有找到相关文章

最新更新