如何实现一个多人在线浏览器游戏?

4
具体来说,如何实现多人游戏部分?我一直在使用跳棋来练习我的JS/PHP/AJAX技能,并且在一个人或两个人在同一台电脑上时已经可以很好地工作了。但是当涉及到让两个人在两台不同的计算机上玩的时候,我有点困惑。我已经掌握了AJAX的部分,服务器正在接收/发送移动操作到/从浏览器。我只是无法想象下一步需要做什么来加入第二个玩家。
像这样简单的东西我需要MySQL吗?我可以使用播放器会话ID的组合来互相传输移动,而不是存储任何服务器端的信息吗?这两个独立实体之间如何开始游戏会话?
如果这个问题让你感到无知,对不起,但我真的不确定如何从这一点继续下去。
编辑:为了澄清,肯定涉及到服务器(因此有了PHP/AJAX的参考)。这一点对我来说显而易见。"移动"显然需要从玩家A到服务器再到玩家B。我面临的问题就是如何实现。虽然下面似乎有一些好的答案,我会依次调查每一个答案。但是请继续添加可能的建议/解决方案,因为我已经从已发布答案的基本研究中学到了很多。
7个回答

1

1
@alexy13 - 那又怎样?HTTPSockets并不是普遍支持的,所以除非他想使用Flash,否则OP肯定需要使用Comet。对于一般问题的一般回答点赞。 - David Titarenco

1

您可以重新利用像Jabber这样的聊天系统之一,并创建一个类似于聊天室的等效物,其中消息被接收并重新传输到所有连接的客户端。这就是实时方面和排序方面发挥作用的地方。由于跳棋是基于回合制的,因此这相当简单。您可以在浏览器中使用标准的Jabber服务器和Javascript 聊天客户端。这将具有额外的优势,让您的玩家实际上可以在同一巴士上互相发送消息,除了游戏移动之外。


将一个好的XMPP服务器与BOSH客户端耦合起来也是我会选择的方法。ejabberd和strophe.js将是我的选择。 - Ollie Edwards

0

直接回答所提出的问题:您确实需要某种形式的服务器端“全局存储”,因为每个会话都是独立的,彼此不知道。

您可以使用文本文件、数据库或内存存储,在ASP中它被称为缓存或应用程序级变量,关于PHP我不确定。


我选择这个答案,因为它确实帮助了我克服障碍。使用了这个PHP应用变量脚本http://www.leosingleton.com/projects/code/phpapp/。 - ggutenberg

0
  • 如果您想保存玩家/用户信息,建议使用数据库(这应该是显而易见的)。
  • 如果是基于会话的,则绝对需要服务器。
  • 对于客户端,我建议使用类似Silverlight或Flash等技术。

  • 对于类似聊天室的体验,您可以让每个客户端连接到服务器并具有监听推送通知的能力(这将防止任何手动向服务器进行更新的“轮询”)。我知道最新的Silverlight和WCF技术直接支持此功能。


0
请查看 Jaxl(PHP / JS 中的 Jabber XMPP 库)BOSH MUC 聊天室 示例。 您可以轻松地扩展此示例以使用 PHP / JS 开发基于浏览器的多人游戏。

0

-1

我之前想过一种技术(但从未实现),即通过使用 session_id 共享所有玩家之间的同一 PHP 会话,但根据 IP 地址($_SERVER['REMOTE_ADDR'])进行区分。这样,您可以将所有游戏状态存储在同一会话中,并且可以使用以 IP 地址为键的数组存储特定于玩家的数据。

当然,您需要一个单独的渠道来首先分发会话 ID。这可以通过不同的方式完成:

  1. 对于私人游戏:将会话 ID 提供给游戏主机,并让他/她将其分发给希望加入游戏的朋友
  2. 对于公共游戏:使用数据库存储活动游戏的会话 ID,并允许任何人加入

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接