快速摘要:

我们有一个完整的Flash游戏,类似于Tetris,已经准备好与多人游戏“联系起来”。经过一些研究并在此处询问:Flash Sockets, Peer-to-Peer Capabilities,我们得出的结论是,如果没有Flash平台上昂贵/可疑的Adobe软件/服务(FMS/Cirrus),则xbox/ps3游戏处理在线游戏的方式进行的P2P网络是不可能的在这个时间点。基本上,没有RTMFP协议(protocol)的情况下,不允许Flash客户端成为监听套接字的“主机”。

需要建议的问题:

总结之后,问题是……为像《俄罗斯方块》这样的游戏实现网络基础架构的最佳方法是什么?该游戏在每个用户之间都有很多小的I/O(例如,最多4个玩家)一次)。鉴于我们不能将单个播放器分配为主机p2p样式,因此我们的选择是:

1.)带有Game Logic的Fat Server,Light Client根据服务器更新来更新显示/插值(Ala Quake)

2.)轻型服务器处理胖客户端之间的通信(Ala并发模拟,例如RTS游戏)

问题是,我们在网络游戏方面经验不足,因此,他们真的很喜欢这些解决方案(甚至其他解决方案)的优缺点的一些建议。当客户清除行数以添加到当前正在战斗的其他玩家时,我们的俄罗斯方块游戏并不像发送“攻击行”那么简单。我们需要比这更多的实时同步。例如,下一个Tetriminos列表是一个共享资源,每个人都在“争夺”所需的作品。

最后,根据选择的实现,我想知道是否有人对游戏服务器上的Node.js有任何经验。我假设如果该服务器是轻量级服务器,则仅处理客户端之间的数据传输,那么Node将是一个非常合适的选择。但是,如果将游戏逻辑放在node.js服务器上,我会假设计算的阻塞性质会使Node.js的单线程无阻塞I/O方法变得多余吗?无论如何,对此问题的任何建议都将受到赞赏。

最佳答案

完全披露:我是联合平台的联合创始人。

如果您想快速启动并运行,我建议使用现有的多用户服务器和客户端框架,例如已经建议的框架或联合平台(www.unionplatform.com,免费提供1000个并发连接)。

人们往往会低估制作具有可靠的大厅系统和配对功能的功能齐全的多人游戏所需的基础设施工作量。如果您是从头开始构建的,则可能会花费与核心游戏物理上一样长的时间,例如连接故障转移和重新连接代码。

在类似多人俄罗斯方块的游戏中,我将在服务器上实现权威的游戏/世界逻辑(结合起来,您将使用room模块),并在客户端上镜像服务器端模拟。客户端显示输出,对服务器端环境进行插值,并提供播放器输入。这是使用该方法的示例多人乒乓球游戏:

http://www.unionplatform.com/?page_id=1229

Union可能对您的情况有用的一项功能是,它除了支持传统的http通讯之外,还支持javascript websocket。

http://www.unionplatform.com/?page_id=1587

javascript支持使您可以选择在html5中创建完整的游戏客户端,或添加 native Web浏览器客户端以显示统计信息或观看Flash中正在玩的游戏。 union的协议(protocol)也已公开记录(http://www.unionplatform.com/?page_id=86),因此您可以使用任何语言构建自定义客户端功能。

出于好奇,您是否有游戏的公共(public)链接?

玩得开心!

科林

关于Flash游戏服务器建议(Node.js,Red5等),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6949272/

10-16 21:05