iPhone在线多人游戏需要什么类型的网络编程?

iPhone在线多人游戏需要什么类型的网络编程?,iphone,network-programming,client-server,Iphone,Network Programming,Client Server,我问这个问题是关于游戏编程问题系列的一小部分 把问题作为主要问题 现在假设我想在iphone上开发一个游戏——一个简单的在线多人棋盘游戏 假设这是一张赌场的桌子 ChrisF的主要问题是告诉我iphone在线多人游戏的客户机-服务器体系结构 我想知道对于这种类型的应用,我必须做什么样的网络编程 客户机和服务器的职责和活动是什么 你可以提供我的链接,教程或到点的答案,任何东西都会对我有很大的帮助,将是非常可观的 谢谢您需要编写一个在服务器上运行的套接字应用程序。当您访问wifi接入点或edge/3

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

把问题作为主要问题

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

假设这是一张赌场的桌子

ChrisF的主要问题是告诉我iphone在线多人游戏的客户机-服务器体系结构

我想知道对于这种类型的应用,我必须做什么样的网络编程

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

你可以提供我的链接,教程或到点的答案,任何东西都会对我有很大的帮助,将是非常可观的


谢谢

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

对于服务器套接字编程,请参阅本指南-

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

一个简单的在线多人棋盘游戏 考虑到iPhone并不总是连接到互联网,您可能需要一台服务器来存储状态。或者,你也可以规定,如果一个人失去了联系,游戏就结束了

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

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


假设iPhone有一个像样的JSON或SOAP库,那么使用JSON/SOAP路由的第二种方法将更容易入门。我不知道Objective C中的UDP,但是在C中它需要一定程度的知识,这并不能让您快速地玩一些东西。

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

  • 服务器只能作为玩家之间的网关来连接彼此:它的两个用途是,第一,列出正在运行的游戏,第二,列出玩家的IP地址,以便每个客户端读取IP地址并连接到它们。这将减少web服务器的带宽和处理能力,并增加游戏主机的带宽和处理能力。在此配置中,其中一个客户端将充当服务器,并向其他客户端发送数据。如果你的游戏一次只有一个玩家在玩,而不是很多玩家,这就是你应该使用的,因为你支付的是服务器的力量

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

无论如何,大多数情况下,您只需要一台机器(在游戏过程中可以像第一种情况一样进行更改)进行处理,而其他机器只接收计算出的数据

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

<>如果WWW服务器上不需要太多的处理,你可以用PHP和MySQL等服务器脚本语言来处理它,但是你最有可能使用C++中的自己的服务器(或者C)。如果使用C++,则可能需要使用已经存在的库,例如.< /p> 客户端显然将在Objective-C中编程,因为它在iPhone上。我相信有一个很好的网络框架可以查看在线游戏的数量,因此您最好不要使用外部服务器网络库


对于你想做的事情来说,这可能有点太多了,但你也可以使用众所周知的方法。

嗨。首先,你并不总是需要一个服务器:如果你的项目是一个由用户在同一个房间里玩的游戏,你可以使用蓝牙,因此,你不需要连接到互联网的网络。因此,你也许应该通过回答来明确你的问题:球员们会在同一个房间吗?因为如果你使用蓝牙或者使用互联网上的服务器,设计会有很大的不同。嗨,FIfifox,我在上面的问题中只留下了一个词,那就是“在线”,我正在编辑这个问题来更正它嘿,chaoz,谢谢你的回答,但我想知道客户端的部分,也就是iPhone。什么样的事情适用于iPhone网络编程?谢谢@克里斯我从你的答案得到很多东西你应该考虑的事实,你可能无法获得你需要的性能时,使用HTTP;如果您需要快速响应但高可靠性,请使用TCP套接字。SQLite是MySQL的轻量级替代品。