iOS客户端应用程序与Mac服务器

时间:2012-01-08 19:23:17

标签: objective-c ios cocoa client-server

我正在尝试构建客户端/服务器游戏架构,并希望使用我的本地Mac作为服务器开始测试游戏。我在Bonjour上发现了几篇文章,但这仅适用于本地网络流量。我的目标是使此应用程序在Internet上运行,连接到静态地址上的托管应用程序以便于转换数据。但是,我不知道为此目的使用哪些Cocoa API。我应该使用NSConnectionNSStream subclasses,还是使用'C sockets以及诸如此类的东西。游戏状态已经在Objective-C中构建,并且一旦我准备好服务器设备就可以开始运行了。有什么见解吗?

3 个答案:

答案 0 :(得分:3)

NSConnection,NSStrean和C套接字是为满足不同需求而构建的。您需要指定游戏的需求和服务类型才能获得更多帮助。如果您想开发依赖于Internet而不是本地网络的客户端 - 服务器应用程序,Bonjour将无法提供帮助。

C套接字和环绕它们的Cocoa API旨在在客户端和服务器之间的开放网络流上运行。拥有开放流的优点是,您可以让服务器将数据发送到客户端,而无需客户端请求它。 Cocoa中的NSURLConnection工作方式不同。有了它,您可以执行HTTP请求并从服务器接收格式化的响应。

如果您的应用程序基于HTTP请求,我建议您查看NSURLConnection或AFNetworking作为第三方替代方案。如果你的应用程序依赖于开放流,我建议你看一下Apple的CFNetwork(来自Macs拥有Carbon,具有出色性能,稳定性和多功能性的时代的BSD套接字的C包装)和GCDAsyncSocket,一个第三方库BSD套接字,支持Crand Central Dispatch,是Objective-C准备好的,并且完美地完成了工作。

我希望我能帮忙。

答案 1 :(得分:1)

我建议您使用套接字,因为它们不难使用并且是标准方式。我甚至围绕BSD套接字编写了一个异步包装类:https://github.com/H2CO3/TCPHelper

这适用于简单的一对一TCP协议连接,支持IPv4和IPv6。您可以发送和接收原始NSData,并可能围绕它构建协议。

NSURLConnection等基础课程并非特别为此目的;而不是与标准HTTP服务器交互(我想你不想为游戏实现完整的HTTP服务器)。

NSNetServices可能就像CFNetwork一样适合你,但后者有点难以使用。如果您想使用Foundation类,我建议使用NSNetServices。

希望它有所帮助。

答案 2 :(得分:1)

有许多不同的方法可以实现这一目标。这实际上取决于你将如何传递数据以及它将用于什么。

首先,我会设置一个主机名,您可以将其用于游戏的开发目的。您可以使用http://dyn.com/dns/之类的内容为Mac设置此功能。然后,您可以启用编译器设置以切换开发/生产URL。

接下来,我建议您为游戏使用TCP套接字(使用CocoaAsyncSocket - https://github.com/robbiehanson/CocoaAsyncSocket)。此方法应该可以正常使用您的用例。由于您正在进行基于回合制的数据(并且由于所有这些数据都很重要),我不建议使用UDP套接字(但如果您只是传递位置,视频或音频数据,而丢弃的数据包可能无关紧要,那么这些功能将起作用)