我对服务器/套接字编程几乎一无所知。 请原谅我的无知。
我正在制作一款需要与我的网络服务器集成的iOS应用。该功能类似于聊天室 - 多个客户端将“连接”并“监听”服务器会话,任何一个客户端都可以发送“位”,所有客户端都将收到“位”。
我应该为此使用低级套接字侦听和回调吗?有更好,更省电的方式吗?我应该使用一个很酷的框架吗?
答案 0 :(得分:1)
有很多选择:
根据应用程序的复杂程度(身份验证?阻止联系人?一对多和一对一聊天?),您可以决定上述任何选项。有了更多细节,我可以帮助你。
答案 1 :(得分:0)
如果您希望在应用程序不在前台时能够接收数据,则需要使用Apple的推送通知功能,该功能在硬件中实现,并且是与网络连接的唯一方式省电模式。
有大量文档如何工作,基本上设备向您的服务器注册(在询问用户许可之后),您使用它给您的令牌发送ping到Apple的服务器,该服务器将ping转发到设备。然后,设备可以联系您的服务器并下载您要发送给它的实际数据。
如果您在应用程序运行时只与服务器通信的服务器没问题,那么您有几个选择。最简单的是“长轮询”,应用程序使用以下内容向服务器发送HTTP请求:
NSURL *serverUrl = [NSURL URLWithString:@"http://example.com/"];
NSString *response = [NSString stringWithContentsOfURL:serverUrl usedEncoding:NULL error:NULL];
NSLog(@"%@", response);
而不是服务器立即响应,它可以等待很长时间(例如45秒),直到它有东西发送到设备,然后它响应信息。
如果达到45秒而没有任何要发送的内容,它只会发送一个没有响应,并且电话会立即向同一个URL打开一个新的URL请求。这使服务器不会打开一堆旧的/废弃的连接。通常在60秒后删除连接,因此您希望在达到该时间限制之前进行响应。显然,您希望在NSOperationQueue
的后台队列上执行请求。
还有其他选项,您可以使用套接字,您可以在手机上的自定义HTTP端口上启动Web服务器(例如:https://github.com/robbiehanson/CocoaHTTPServer)。但长期民意调查通常是最简单的选择。
大多数应用都使用推送通知和其他内容的组合。