2010-06-29 56 views
2

什么是最好的方法来通知JavaScript客户端的异步游戏中发生的变化(即其他客户端所做的动作)。作为一个例子,假设回合制棋盘游戏。我是否应该让客户端每隔一秒左右轮询PHP后端以进行新的移动,还是有更好的方式向同一游戏中的其他客户端发送异步通知?对于如何在每个客户端的后端实例之间分发通知,你最好的想法是什么?协调javascript客户端到单个后端游戏的最佳方式是什么?

目前,我打算把在一个SQL数据库中的每个举动,然后让每个客户端轮询新动作每秒数据库,但这似乎缺憾,效率低下......

回答

2

轮询每一秒左右是一个选项,但您可能需要考虑long polling,以减少延迟。

引用Comet Daily: The Long-Polling Technique

的长轮询彗星技术是优化传统的轮询以减少等待时间的技术。

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

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

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页面上的JavaScript。

这是一个疯狂的想法,我从来没有投入到生产。但根据你的使用情况,它可能值得研究,而且很容易。

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

相关问题