2010-03-01 57 views
0

我正在开发多人iPhone应用程序,允许多达6个用户“实时”连接和玩游戏。我一直在寻找托管和非托管套接字服务器(SmartFox,ElectroServer,Photon/Neutron,ProjectDarkstar),我想知道如果任何人有任何建议的服务或实施?任何人都知道Zynga的Live Poker用于这种类型的功能或您需要什么类型的硬件?用于iPhone应用程序的多人游戏服务器,使用设备作为套接字服务器

一些小问题:

  1. 游戏是回合制。使用AMF和轮询服务器还是应该使用基于套接字的路由更合理?我目前的担心是并发连接限制和托管成本。

  2. 是否可以将设备“广播”为套接字服务器?即一旦我连接了所有我的播放器,我是否可以分配6个设备中的一个作为套接字服务器,并通过该设备推送所有通信?那会疯了吗?这将解决并发问题,我只需要依靠套接字服务器服务作为初始连接的大厅。分配的用户将保持连接以促进游戏到服务器的通信。

+0

你打算让人们通过本地网络(蓝牙或WiFi)或通过互联网进行游戏吗?如果前者是这种情况,你有没有考虑过使用GameKit? – Felixyz 2010-03-02 02:34:21

+0

两者。我将使用GameKit进行设备到设备的播放,但我也想支持在互联网功能上“查找游戏”。 – typeoneerror 2010-03-02 02:36:54

回答

2

1.

它更容易使用轮询,并且由于游戏是基于转,你可以在一个相对缓慢的速度(可能是几秒钟),这意味着电池消耗更少的轮询。也就是说,使用套接字或持久的HTTP连接将是一种更简单的方式(以及更多的工作)。这两个问题可能会感兴趣:

How do I create a chat server that is not driven by polling?

COMET (server push to client) on iPhone

我不知道为什么你会使用AMF。为什么不使用JSON?或者也许HessianKit

2. 将其中一台设备指定为服务器很有意义。拥有需要同步的完全分散的游戏客户端网络是一项非常艰巨的任务。同样,由于您的游戏是基于回合的,不需要完美的实时同步,因此您不必担心集中状态会引入更多延迟。

如果您打算让用户通过本地网络进行游戏,您应该考虑使用GameKit。

+0

在#2上。有关如何开始这样做的任何资源?我一直在检查我们的RakNet(http://www.jenkinssoftware.com/),并认为这可能会起作用,但我远离C专家,所以我不确定这是否可以实现。感谢您的洞察力。 – typeoneerror 2010-03-02 03:14:04

+1

也许这可能比你想象的更简单。你可能不需要一个完整的游戏网络库。我会这样做的方式是编程应用程序,以便输入和逻辑和屏幕表示完全分开。然后写一个愚蠢地模仿第二个玩家控制的虚拟共同玩家类。当它工作时,插入GameKit以从该层获得实际的控制事件。运行时,使用Google App Engine编写服务器并使用轮询来获取状态更新。同样,这应该只与你的代码中传入输入事件的部分接口。 – Felixyz 2010-03-02 03:52:27

+0

至于使其中一个设备成为服务器,您可以在建立连接时任意决定哪个服务器是服务器(也许是首先播放的服务器)。所有其他设备都不会响应用户事件(除了突出显示按钮之类的简单内容)更新它们的接口,而是将它们发送到服务器,然后获取导致接口更新的事件对象。不要试图让每个设备更新它自己的状态。 (这在实时游戏中通常是必需的,但很难实现。) – Felixyz 2010-03-02 03:58:38