【问题标题】:what type of network programming is necessary in iPhone online multiplayer game?iPhone在线多人游戏需要什么样的网络编程?
【发布时间】:2011-03-09 11:51:12
【问题描述】:

我提出这个问题是我关于游戏编程的问题系列的一小部分。

参考this问题作为主要问题。

现在假设我想在 iphone 上开发一款游戏 - 简单的在线多人棋盘游戏。

假设它是一张赌桌。

ChrisF 告诉我的主要问题是 iPhone 在线多人游戏的客户端 - 服务器架构。

我想知道我必须为这种类型的应用程序做什么样的网络编程。

客户端和服务器的职责和活动是什么。

你可以给我链接、教程或重点答案,任何东西都会对我有很大的帮助,而且真的很可观。

谢谢

【问题讨论】:

  • 嗨。首先,您并不总是需要服务器:如果您的项目是一个由同一房间内的用户玩的游戏,您可以使用蓝牙,因此您不需要连接到互联网的网络。因此,您或许应该通过回答来精确您的问题:玩家会在同一个房间吗?因为如果您使用蓝牙或使用 Internet 上的服务器,设计将完全不同。
  • 嗨 FIfifox 我在上面的问题中只留下了一个单词“在线”我正在通过编辑问题来更正它

标签: iphone network-programming client-server


【解决方案1】:

您需要编写一个在服务器上运行的套接字应用程序。当您可以访问 wifi 接入点或 edge/3g 时,您可以从您的 iphone 应用程序向其发送数据。然后,该服务器可以处理传入的数据并向连接的人员发送适当的回复。

对于服务器套接字编程,请查看本指南 - http://beej.us/guide/bgnet/

对于 iphone 特定的套接字编程,请查看随 Iphone SDK 提供的示例。 This link也有一些基本信息。

【讨论】:

  • 嘿 chaoz 感谢您的回答,但我也想知道客户端部分,即 iPhone 。 iPhone网络编程适用哪些东西?
【解决方案2】:

一个简单的在线多人棋盘游戏

鉴于 iPhone 并不始终连接到互联网,您可能需要一个服务器来存储状态。或者,您始终可以规定,如果一个人失去连接,则游戏结束。

客户端到客户端将是后者的明显选择。两个客户端都有一个监听端口,并根据板子状态发送其他命令。与几乎所有在线游戏一样,显而易见的选择是使用 UDP,因为它既快速又紧凑。

对于服务器架构,您当然需要某种服务器来监听命令和游戏编号。它将您的状态存储在服务器上的数据存储中,例如 mySQL 数据库。 UDP 甚至 SOAP 或 JSON over HTTP 将是这两个明显的选择。

如果 iPhone 有一个不错的 JSON 或 SOAP 库,那么使用 JSON/SOAP 路由的第二种方法对您来说会更容易上手,这不太可能。我不知道 Objective C 中的 UDP,但是在 C 中它需要一定程度的知识,这不会让你快速上手。

【讨论】:

  • 谢谢@Chris S 我从你的回答中得到了很多东西
  • 您应该考虑这样一个事实:使用 HTTP 时您可能无法获得所需的性能;如果您需要快速响应但高可靠性,请使用 TCP 套接字。
  • SQLite 是 MySQL 的轻量级替代品。
【解决方案3】:

正如你已经说过的,你需要一个服务器,但你可以有两种设计:

  • 服务器只能作为玩家之间相互连接的网关:它有两个用途,一是列出正在运行的游戏,二是列出玩家的IP地址,以便每个客户端都将读取 IP 地址并连接到它们。这将需要更少的网络服务器带宽和处理能力,而更多用于托管游戏的客户端。在此配置中,其中一个客户端将充当服务器并将数据发送给其他客户端。如果您的游戏一次只有一个玩家玩,而不是很多玩家,这就是您应该使用的,因为您支付的是服务器的功率。

  • 服务器还可以存储所有游戏的状态:它可能需要更多的处理能力和/或带宽,具体取决于您的游戏。

无论如何,大多数情况下,您只希望一台机器(可以在游戏过程中像第一种情况一样发生变化)进行处理,而其他机器只会接收计算数据。

要编写网络游戏,您需要了解套接字(在第一种情况下需要深入了解,因为您必须处理 NAT 问题、路由器阻塞客户端之间的路径)。这方面的指南是Beej's Guide to Network Programming,这是该主题的第一资源,尽管它不专注于游戏。

如果不需要在 WWW 服务器上进行太多处理,您可以使用 PHP 和 MySQL 等服务器脚本语言来处理它,但您最有可能使用自己用 C++(或 C)编写的服务器。如果您使用 C++,您可能希望使用已经存在的库,例如 RakNet

客户端显然会像在 iPhone 上一样使用 Objective-C 进行编程。我相信有一个很好的网络框架来查看在线游戏的数量,所以你最好不要使用外部服务器网络库。

你想做的事情可能有点过分,但你也可以使用众所周知的Torque Engine

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2012-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    相关资源
    最近更新 更多