2010-01-19 146 views
3

我见过很多基于浏览器的游戏,玩家同时玩耍。 通常在等待一段时间后,您可以加入每个人都在玩的房间,或者您可以与其他玩家对阵。 所有这些游戏都使用Flash。与同时玩家的网页游戏

他们是如何实现这一目标的? 没有Flash的同谋会很复杂吗?

有任何工具包(导轨等)或插件,提供此功能? 或者只是存储会话和混合它们的问题?

只是一个快速编辑: 我不感兴趣,Flash或Silverlight解决方案

+0

我很抱歉没有评论我正在做的游戏的类型。 这不是一个巨大的游戏,好吧,我不指望它会大受欢迎。我只需要2到4名玩家同时玩同一款游戏。 – Jordi 2010-01-20 10:30:32

回答

3

对于仅限JavaScript的解决方案,有几个选项。他们都涉及AJAX这种或那种形式。 (请参阅我在AJAX and Client-Server Architecture with JavaScript上有关更大分解的回答。)

您可以在AJAX轮询,长轮询,COMET或即将推出的Web套接字之间进行选择。第一步是了解AJAX。一旦您对此感到满意,您可以设置一个轮询系统(使用setInterval)每隔n毫秒轮询服务器以获取新数据。

1

这是可能的,如果您熟悉Ajax和你的游戏不需要用户之间的快速互动,做到不使用闪光灯。但无论如何,我相信你必须轮询服务器。你可能也想阅读彗星http://en.wikipedia.org/wiki/Comet_(programming))。

0

Java小程序可以用JavaScript通信(例如你希望你的UI是HTML & CSS)。因此,在理论中,您可以在签名的Java Applet中实现您的网络代码。在这种情况下,您不会受限于纯客户机 - 服务器模式。

+0

我认为关键是他不想依赖RIA技术。 – EndangeredMassa 2010-01-19 21:26:53

1

你能澄清你想做什么样的游戏吗?转向还是实时?

既然你不感兴趣,Flash或Silverlight解决方案(可同时使用插座从而与成千上万的用户很好地扩展),您可以使用JavaScript和使用Ajax来发送和接收数据。

基本上你可以通过具有服务器的延迟响应它,直到它有数据要发送发出输入然后让脚本“长轮询”的服务器上使用AJAX像一个插座。唯一的问题是你只能在连接超时之前保持连接打开状态(〜30秒)。尽管您经常来回传递数据,但这通常不是问题。

我最好的FastCGI研究(或所以我相信它可以像这方面的工作),并有一个游戏服务器守护程序直接响应请求。这样它可以打开单个数据库连接并快速处理所有客户端。虽然这不是必要的,但如果正确实施,它可能会很好地扩展。

目前我一直在做一个幼稚的概念证明。 (比使用数据库作为状态并仅仅使用PHP脚本来更新和接收数据库的状态要少得多,但我应该注意到,尽管只有少数用户和你自己的数据库这个工作得很好,但我有20个客户在100毫秒更新。当然它不能很好地扩展并以每客户端每秒10个连接杀死数据库,但它“工作”)。基本上这个想法是,我有JavaScript生成数据包,并将它们发送到PHP脚本。该PHP脚本打开一个unix域套接字并将数据转发到C++守护进程。虽然还没有进行基准测试,所以很难说它会如何扩展。

如果你觉得舒服,但我真的推荐学习闪存和套接字网络。在Windows上使用Linux或IOCP上的Epoll可以托管数百个客户端。过去,我在C#套接字服务器上完成了100个客户端的测试,并且CPU处理不断的小包数据流的时间少于5%。