Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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-在整个iOS应用程序中实现websocket连接的最佳解决方案?_Ios_Objective C_Websocket_Socketrocket - Fatal编程技术网

iOS-在整个iOS应用程序中实现websocket连接的最佳解决方案?

iOS-在整个iOS应用程序中实现websocket连接的最佳解决方案?,ios,objective-c,websocket,socketrocket,Ios,Objective C,Websocket,Socketrocket,在我的应用程序中,websocket连接和通信在特定的ViewController中,但后来请求通过整个应用程序的websocket接收消息 最好的方法是什么?要将websocket代码移动到AppDelegate或创建超级ViewController?或者其他更好的方式?如果要求您的应用程序始终与外部方通信,并且多个视图控制器可以显示消息并对其进行操作,那么您需要将通信转移到单独的实例,并为视图控制器提供一个与之交互的界面 我将创建一个通信类或一组类,您可以在appDelegate中创建的共享

在我的应用程序中,
websocket
连接和通信在特定的
ViewController
中,但后来请求通过整个应用程序的
websocket
接收消息


最好的方法是什么?要将
websocket
代码移动到
AppDelegate
或创建超级
ViewController
?或者其他更好的方式?

如果要求您的应用程序始终与外部方通信,并且多个视图控制器可以显示消息并对其进行操作,那么您需要将通信转移到单独的实例,并为视图控制器提供一个与之交互的界面

我将创建一个通信类或一组类,您可以在appDelegate中创建的共享实例。然后,不同的视图控制器可以通过appDelegate或您提供的其他机制访问此共享实例

这将有多复杂取决于您的确切要求

编辑以下评论更新要求:

要求似乎是您希望能够始终接收消息,而不考虑视图控制器,但能够通过视图控制器发布消息

要做到这一点,您需要让共享实例提供用于打开连接的API。让它注册在runloop上连接的web套接字(不确定您使用的是哪个web套接字API),以便您可以在有活动时处理通信,并在没有活动时执行其他操作。您可以在主线程或后台线程上执行此操作,这取决于您认为消息传递将增加多少负载

让您的新共享实例处理所有传入消息,并将它们放入内部队列中。为客户端实例(如视图控制器)提供订阅接口,以注册传入消息通知。您可以将其设置为直接接口或使用通知。您的选择取决于用例。如果视图控制器可以追溯到过去,那么您需要提供对过去接收和发送的完整消息集的访问。除非消息是短期的且您不存储历史记录,否则需要一个清除这些消息或将其缓存到文件的策略

对于发送消息,在共享实例中提供一个API,该API允许消息排队等待将来的确认。使用运行循环机制在套接字准备好写入以发送消息时收到通知。向发送UI提供消息发送确认,以便UI在等待发送时不会被阻止,并允许在第一条消息挂起时写入其他消息


这里有很多工作要做。

谢谢你的回答。确切的情况是,我需要在聊天视图控制器中以及应用程序处于活动状态时接收和发送聊天信息,以便根据接收到的数据(未连接到任何特定的视图控制器)发出通知。