当前位置:  开发笔记 > 编程语言 > 正文

是否有ajax的替代方案,如果没有服务器端修改则不需要轮询?

如何解决《是否有ajax的替代方案,如果没有服务器端修改则不需要轮询?》经验,为你挑选了3个好方法。

我正在尝试创建一个基于"ajax"的小型多人游戏.PHP"处理程序"给出了对象的坐标.通过使用ajax,每200MS轮询此handler.php文件.

由于没有必要在没有任何事情发生时进行轮询,我想知道,如果没有频繁的轮询,是否可以做同样的事情?例如.彗星,虽然我听说你需要为Comet配置服务器端应用程序.这是一个共享的网络服务器,所以我不能这样做.

如果不需要在客户端更改任何内容,可能会阻止handler.php文件甚至返回响应,这可能吗?然后,即使事情没有改变,你仍然会让客户无用地要求回复.基本上,如果需要向客户端告知某些内容,它应该只使用带宽和服务器资源,例如.对象坐标的变化.



1> Adam Bellair..:

Comet通常用于此类事物,它可能是一个脆弱的设置,因为它不是一个特别常见的技术,因此它很容易"不能正确".也就是说,现在有比我上次尝试〜2年前更多的资源了.

我不认为你可以做你正在考虑的事情并且有handler.php根本不返回任何东西并停止执行:Web服务器将保持连接打开并阻止任何进一步的轮询,直到handler.php做某事(终止或提供输出) ).当它发生时,你仍在处理一个回应.

您可以尝试一种长轮询技术,其中您的AJAX允许非常大的超时(例如30秒),并且handler.php在没有响应之前旋转,直到它有报告的内容,然后返回.(您需要确保旋转不是资源密集型的).如果handler.php"过期"并且没有任何反应,请让它退出并让AJAX再次轮询.由于它每30秒才会发生一次,这将是每秒约5次的巨大改进.这将使你的投票保持在最低限度.

但这就是Comet专为此而设计的东西.



2> David Arno..:

由于Ajax只为您提供客户端服务器请求模型(通常称为pull,而不是push),因此从服务器获取数据的唯一方法是通过请求.然而,解决此问题的常用技术是服务器仅在具有新数据时才响应.因此,客户端发出请求,服务器会挂起该请求,直到发生某些事情然后回复.即使数据没有改变,这也需要频繁轮询,因为您只需要客户端在收到响应后发送新请求.

由于您使用的是PHP,因此一种简单的方法可能是让PHP代码在检查数据更改之间一次调用sleep命令200ms,然后在更改时将数据返回给客户端.

编辑:我还建议在请求时超时.因此,如果说2秒没有任何反应,则会发回"无更改"消息.这样,客户端知道服务器仍处于活动状态并处理其请求.



3> hsivonen..:

由于这是标记为"html5":HTML5具有和WebSocket,但实现方在实践中仍处于将来时态.

Opera实现了旧版本的调用.


自2009年以来,EventSource规范发生了变化,http://dev.w3.org/html5/eventsource/,EventSource是标准化的彗星
推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有