与同步玩家的网络游戏

时间:2010-01-19 19:21:13

标签: javascript

我见过很多基于webbrowser的游戏,玩家可以同时玩游戏。 通常在等待一段时间后你可以加入一个每个人都在玩的房间,或者你可以和另一个玩家对战。 所有这些游戏都使用Flash。

他们是如何实现这一目标的? 没有Flash的帮助会非常复杂吗?

有没有提供此功能的工具包(rails等)或插件? 或者只是存储会话并混合它们?

快速编辑: 我对Flash或Silverlight解决方案不感兴趣

5 个答案:

答案 0 :(得分:3)

只有JavaScript的解决方案有几种选择。它们都涉及一种或另一种形式的AJAX。 (有关更大的细分,请参阅AJAX and Client-Server Architecture with JavaScript上的答案。)

您可以选择AJAX轮询,长轮询,COMET或即将推出的Web套接字。第一步是了解AJAX。熟悉它之后,您可以设置一个轮询系统(使用setInterval),以便每隔n毫秒轮询服务器以获取新数据。

答案 1 :(得分:1)

如果您对ajax感到满意并且您的游戏不需要用户之间的快速交互,则可以在没有闪存的情况下执行此操作。但在任何一种情况下,我相信你必须轮询服务器。您可能还想了解彗星http://en.wikipedia.org/wiki/Comet_(programming))。

答案 2 :(得分:1)

你能澄清一下你想制作什么样的游戏吗?转弯还是实时?

由于您对flash或silverlight解决方案(可以使用套接字并因此可以与数千名用户很好地扩展)不感兴趣,因此您可以使用javascript并使用ajax来发送和接收数据。

基本上你可以通过发送输入来使用像socket一样的ajax,然后通过让服务器延迟响应它来让脚本“长轮询”服务器,直到它有数据要发送。唯一的问题是你只能在超时(~30秒)之前保持连接打开这么久。这通常不是问题,因为你经常来回传递数据。

我研究fastCGI(或者我认为它可以像这样工作)并让游戏服务器守护进程直接响应请求。这样,它可以打开单个数据库连接并快速处理所有客户端。虽然没有必要,但如果正确实施,它可能会很好地扩展。

目前我一直在做出一种天真的概念证明。 (比使用数据库作为状态更简单,只使用PHP脚本来更新和接收数据库的状态。我应该注意到,对于只有少数用户和您自己的数据库,这很有效。我有20个客户走动100 ms更新。当然它不能很好地扩展并且每秒每个客户端有10个连接就可以杀死数据库,但它“有效”)。基本上我的想法是我有javascript生成数据包并将它们发送到PHP脚本。该PHP脚本打开一个unix域套接字并将数据转发到C ++守护程序。虽然没有对它进行基准测试,但很难说它的扩展程度如何。

如果您觉得舒服,我确实建议学习闪存和套接字网络。在Linux上使用Epoll或在Windows上使用IOCP,您可以托管数百个客户端。我过去在C#套接字服务器上测试了100个客户端,并且只需不到5%的CPU处理小数据包的常量流。

答案 3 :(得分:0)

取决于您想要使用的技术。 Flash可用于创建类似的游戏,Silverlight也可以。它们都使用javascript将鼠标移动和其他用户输入异步发送到服务器,以便可以在服务器上更新游戏状态。

Flash游戏开发的一篇文章: http://www.brighthub.com/internet/web-development/articles/11010.aspx

Silverlight的: http://www.brighthub.com/internet/web-development/articles/14494.aspx

答案 4 :(得分:0)

Java Applet能够与JavaScript通信(例如,您希望您的UI是HTML和CSS)。因此,在 theory 中,您可以在签名的Java Applet中实现网络代码。在这种情况下,您不会受限于普通的客户端 - 服务器模型。