我问这个问题只是我关于游戏编程的问题系列的一小部分。
将this问题作为主要问题。
现在假设我想在iphone上开发一款游戏 - 一款简单的在线多人棋盘游戏。
假设它是赌场桌。
主要问题ChrisF告诉我有关iphone在线多人游戏的客户端 - 服务器架构。
我想知道我必须为这种类型的应用程序做什么样的网络编程。
客户和服务器执行的职责和活动是什么。
你可以提供我的链接,教程或点答案,任何事情对我都有很大的帮助,并且会非常明显。
感谢
答案 0 :(得分:4)
您需要编写在服务器上运行的套接字应用程序。当您可以访问wifi接入点或边缘/ 3g时,您可以从iphone应用程序向其发送数据。然后,该服务器可以处理传入的数据并向连接的人发送适当的回复。
对于服务器套接字编程,请查看本指南 - http://beej.us/guide/bgnet/。
对于iphone特定的套接字编程,请查看Iphone SDK随附的示例。 This link也有一些基本信息。
答案 1 :(得分:2)
鉴于iPhone 不始终连接到互联网,您可能需要服务器来存储状态。或者你总是可以规定,如果一个人失去联系,游戏就会结束。
客户对客户来说是后者的明显选择。两个客户端都有一个他们监听的端口,并根据电路板状态发送其他命令。像几乎所有在线游戏一样,显而易见的选择是使用UDP,因为它快速而紧凑。
对于服务器架构,您当然需要某种服务器来监听命令和游戏编号。它会将您的状态存储在服务器上的数据存储区中,例如mySQL数据库。 UDP或甚至SOAP或JSON over HTTP将是两个明显的选择。
使用JSON / SOAP路由的第二种方法对于您来说将更加容易,假设iPhone具有不太可能的JSON或SOAP库。我不知道Objective C中的UDP,但是在C语言中它需要一定的知识水平,这些知识无法让你快速掌握。
答案 2 :(得分:2)
正如您所说,您需要一台服务器,但您可以有两种设计:
服务器只能作为玩家之间的网关才能相互连接:它的两个用途是,首先列出正在运行的游戏,其次,列出玩家的IP地址,以便每个客户端将读取IP地址并连接到它们。这将需要较少的带宽和Web服务器的处理能力,并且对于将托管游戏的客户端需要更多。在此配置中,其中一个客户端将充当服务器并将数据发送给其他客户端。如果你的游戏中只有一个玩家一次玩,而不是很多玩家,这就是你应该使用的,因为你支付的是服务器的力量。
服务器还可以存储所有游戏的状态:根据您的游戏情况,它可能需要更多的处理能力和/或带宽。
无论如何,大多数时候你只需要一台机器(在游戏过程中可以像第一种情况那样改变)进行处理,其他机器只接收计算数据。
要编写网络游戏,您需要了解套接字(在第一种情况下需要深入了解,因为您必须处理NAT问题,路由器阻止客户端之间的路径)。它的指南是Beej's Guide to Network Programming,这是该主题的头号资源,虽然它不关注游戏。
如果WWW服务器上不需要太多处理,您可以使用PHP和MySQL等服务器脚本语言来处理它,但您最有可能使用自己的C ++编程服务器(或C语言)。如果您使用C ++,则可能需要使用现有的库,例如RakNet。
客户端显然将在Objective-C中编程,因为它在iPhone上。我相信有一个很好的网络框架可以查看在线游戏的数量,因此您可能不想使用外部服务器网络库。
对于您想要做的事情可能有点过分,但您也可以使用众所周知的Torque Engine。