【问题标题】:iOS client app with Mac server带有 Mac 服务器的 iOS 客户端应用程序
【发布时间】:2012-01-08 19:23:16
【问题描述】:

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

【问题讨论】:

标签: objective-c ios cocoa client-server


【解决方案1】:

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

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

如果您的应用程序基于 HTTP 请求,我建议您将 NSURLConnection 或 AFNetworking 作为第 3 方替代方案。如果您的应用程序依赖于开放流,我建议您看一下 Apple 的 CFNetwork(围绕 BSD 套接字的 C 包装器,起源于 Mac 拥有 Carbon 的日子,具有出色的性能、稳定性和多功能性)和 GCDAsyncSocket,一个包装在BSD 套接字,支持 Crand Central Dispatch,支持 Objective-C,并且出色地完成了这项工作。

希望我能帮上忙。

【讨论】:

    【解决方案2】:

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

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

    NSURLConnection 等基础类并不是专门用于此目的的;而不是与标准 HTTP 服务器交互(我想您不想为游戏实现完整的 HTTP 服务器)。

    NSNetServices 可能像 CFNetwork 一样适合您,但后者更难使用。如果你想使用 Foundation 类,我推荐 NSNetServices。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      有许多不同的方法可以实现这一点。这实际上取决于您将如何传递数据以及数据的用途。

      首先,我将设置一个主机名,您可以将其用于游戏开发。您可以使用 http://dyn.com/dns/ 之类的任何东西为您的 Mac 进行设置。然后,您可以启用编译器设置来切换开发/生产 URL。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 2021-10-18
        • 2016-08-17
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        相关资源
        最近更新 更多