将javascript客户端协调到单个后端游戏的最佳方法是什么?

时间:2010-06-29 21:19:52

标签: php javascript notifications

用于通过javascript客户端异步通知游戏中发生的更改(即其他客户端进行的移动)的最佳方法是什么。作为示例,假设基于回合的棋盘游戏。我是否应该让客户端每隔一秒左右轮询PHP后端进行新的移动,或者是否有更好的方法向同一游戏中的其他客户端发送异步通知?对于如何在每个客户端的后端实例之间分发通知,您最好的想法是什么?

我目前正在计划将每个移动放在一个SQL数据库中,然后让每个客户端每秒轮询数据库以获取新的移动,但这看起来很蹩脚且效率低......

3 个答案:

答案 0 :(得分:2)

每隔一秒左右轮询是一种选择,但您可能需要考虑long polling来减少延迟。

引用Comet Daily: The Long-Polling Technique

  

长轮询Comet技术是一种优化传统轮询以减少延迟的技术。

     

传统轮询以固定间隔向服务器发送XMLHttpRequest。例如,每15秒打开一个新的XMLHttpRequest,接收立即响应,并关闭连接。

     

长轮询向服务器发送请求,但在有一个响应可用之前,不会将响应返回给客户端。一旦连接关闭,或者由于客户端收到响应或者请求超时,就会启动新连接。结果是延迟显着减少,因为服务器通常在准备好返回信息以返回客户端时建立连接。

答案 1 :(得分:0)

不幸的是,这只有几个选择。如果您想使用推送技术,所有这些都将涉及在服务器上发送某种类型的客户端发送通知。或者轮询是可行的方法。

但正如这里的切线是我多年前玩过的解决方案:http://www.spsolutionscorp.com/blog/2007/03/14/RealTimeUpdatesToWebPageUsingMacromediaFlash.aspx

它的要点是:启用了服务代理的Sql Server。服务器上的.Net服务,它使用SqlDependency监听查询结果的更改(http://support.microsoft.com/kb/555893)。一旦发生更改,.net服务就会通过我在上面的博客文章中写到的flash客户端所做的所有连接进行循环。然后Flash应用程序可以调用页面上的javascript。

这是一个疯狂的想法,我从来没有投入制作。但根据您的使用情况,可能值得研究,并且很容易上手。

但这又是一个完全疯狂的想法,而且我再也没有投入生产,所以使用风险自负。只是想我会分享。

答案 2 :(得分:0)

无论请求和响应的轻量级如何,轮询都可以轻松堆叠并消耗大量资源(例如:带宽)。

http://ajaxpatterns.org/Periodic_Refresh

您可能想尝试使用Comet / HTTP Streaming http://ajaxpatterns.org/HTTP_Streaming