iOS方法论:我应该听一个套接字吗?

时间:2014-04-13 00:47:17

标签: ios objective-c cocoa-touch sockets

我对服务器/套接字编程几乎一无所知。 请原谅我的无知。

我正在制作一款需要与我的网络服务器集成的iOS应用。该功能类似于聊天室 - 多个客户端将“连接”并“监听”服务器会话,任何一个客户端都可以发送“位”,所有客户端都将收到“位”。

我应该为此使用低级套接字侦听和回调吗?有更好,更省电的方式吗?我应该使用一个很酷的框架吗?

2 个答案:

答案 0 :(得分:1)

有很多选择:

  1. 使用套接字连接服务器并推出自己的协议
  2. 使用应用中的网络套接字和长轮询。这意味着您将触发HTTP请求,并且您的服务器将保持打开状态,比如说等待消息的一分钟。看看这里开始:What are Long-Polling, Websockets, Server-Sent Events (SSE) and Comet?
  3. 使用像Openfire或Ejabberd这样使用XMPP的聊天服务器,并在您的客户端上使用XMPPFramework(https://github.com/robbiehanson/XMPPFramework
  4. 根据应用程序的复杂程度(身份验证?阻止联系人?一对多和一对一聊天?),您可以决定上述任何选项。有了更多细节,我可以帮助你。

答案 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)。但长期民意调查通常是最简单的选择。

大多数应用都使用推送通知和其他内容的组合。