Javascript 同时玩家的网络游戏

Javascript 同时玩家的网络游戏,javascript,Javascript,我看过很多基于网络浏览器的游戏,玩家同时玩。 通常在等待一段时间后,你可以加入一个每个人都在玩的房间,或者你可以和另一个玩家玩。 所有这些游戏都使用Flash 他们是如何做到这一点的? 在没有闪光灯的情况下共犯会很复杂吗 是否有任何工具包(rails等)或插件提供此功能? 或者仅仅是存储会话并将其混合的问题 只需快速编辑: 我对Flash或Silverlight解决方案不感兴趣取决于您想要使用什么技术。Flash可以用来创建这样的游戏,Silverlight也可以。它们都使用javascript

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

他们是如何做到这一点的? 在没有闪光灯的情况下共犯会很复杂吗

是否有任何工具包(rails等)或插件提供此功能? 或者仅仅是存储会话并将其混合的问题

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

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

一篇关于flash游戏开发的文章:

Silverlight:

如果您对ajax感到满意,并且您的游戏不需要用户之间的快速交互,那么就可以不使用flash进行操作。但无论哪种情况,我相信你都必须对服务器进行轮询。您可能还想了解comet)。

Java小程序能够与JavaScript进行通信(例如,您希望您的UI是HTML和CSS)。因此,从理论上讲,您可以在一个签名的Java小程序中实现您的网络代码。在这种情况下,您将不限于普通客户机-服务器模型

你能说明你想玩什么样的游戏吗?基于回合还是实时

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

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

我会研究fastCGI(或者我相信它可以像这样工作),让游戏服务器守护进程直接响应请求。这样,它可以打开单个数据库连接并快速处理所有客户端。虽然这不是必需的,但如果实现正确,它可能会扩展得非常好

目前我正在做一个有点幼稚的概念证明。(与使用数据库作为状态并仅使用PHP脚本来更新和接收数据库的状态相比,这不算幼稚。但我应该注意,对于少数用户和您自己的数据库来说,这工作得相当好。我有20个客户端在100毫秒更新时四处走动。当然,它不能很好地扩展,并且会用每个客户端10个连接来杀死数据库本身康德,但它“工作”)。基本上,我的想法是让javascript生成数据包并将它们发送到PHP脚本。PHP脚本打开UNIX域套接字,并将数据转发给C++守护进程。但还没有对其进行基准测试,所以很难说它的可扩展性有多好


如果你觉得舒服的话,我真的建议你学习flash和socket网络。在linux上使用Epoll或在windows上使用IOCP,您可以承载数百个客户端。过去,我在C#socket服务器上对100个客户端进行了测试,处理恒定的小数据包流所需的CPU不到5%。

对于纯JavaScript的解决方案,有几个选项。它们都涉及某种形式的AJAX。(有关更大的细分,请参见我的答案。)


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

我想关键是他不想依赖RIA技术。很抱歉没有对我正在做的游戏类型发表评论。这不是一个大规模的游戏,嗯,我不希望它会大受欢迎。我只需要2到4个玩家同时玩同一个游戏。