Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ajax";有新的内容吗?如果是,请更新第页";-如何做到这一点而不破坏服务器?_Javascript_Mysql_Ajax_Comet - Fatal编程技术网

Javascript Ajax";有新的内容吗?如果是,请更新第页";-如何做到这一点而不破坏服务器?

Javascript Ajax";有新的内容吗?如果是,请更新第页";-如何做到这一点而不破坏服务器?,javascript,mysql,ajax,comet,Javascript,Mysql,Ajax,Comet,这是一个javascript的简单例子,它不断地问“现在还存在吗?”就像一个开车的四岁小孩。。但是,就像父母一样,如果你经常这样做,或者同时有太多的孩子,服务器会在压力下崩溃 你如何解决这样一个问题:一个网页每5秒钟查找一次新内容,并且允许更多的访问者访问?stackoverflow以某种方式做到了这一点,但不知道如何做到 更标准的方法实际上是每隔几秒钟寻找新内容的javascript 更高级的方法是使用一种技术,即使用一些技术(长轮询等)。在这个链接下有很多有趣的东西 我仍然在等待一个好的机会

这是一个javascript的简单例子,它不断地问“现在还存在吗?”就像一个开车的四岁小孩。。但是,就像父母一样,如果你经常这样做,或者同时有太多的孩子,服务器会在压力下崩溃


你如何解决这样一个问题:一个网页每5秒钟查找一次新内容,并且允许更多的访问者访问?

stackoverflow以某种方式做到了这一点,但不知道如何做到

更标准的方法实际上是每隔几秒钟寻找新内容的javascript

更高级的方法是使用一种技术,即使用一些技术(长轮询等)。在这个链接下有很多有趣的东西

我仍然在等待一个好的机会来使用它自己

哦,这里有一个stackoverflow的链接:

您可以看看python中的框架。它是一个事件驱动的网络编程框架,可以满足您的需求。它可以用于从服务器推送消息。

也许您可以向一个真正简单的脚本发送一个查询,该脚本不需要进行真正的数据库查询,而只使用一个简单的时间戳来判断是否有新的内容


然后,如果答案是真的,您就可以执行真正的查询,服务器必须执行真正的工作

在Java中,我使用了使用Comet技术的Ajax库(DWR)——我认为您应该使用它在PHP中搜索库。 其思想是服务器正在发送一个很长的Http响应,当它有东西要发送给客户端时,它将结束该响应并发送带有更新数据的新响应。
使用it客户端不必每x秒ping一次服务器以获取新数据—我认为这会对您有所帮助。

您可以根据客户端的数量设置轮询时间变量。用你的比喻,孩子问“我们到了吗?”司机回答“没有,但可能一小时后”。谢天谢地,JavaScript并不是一个固执的孩子,所以你可以确信他在那之前不会打扰你。

你可以考虑每5秒开始一次轮询,但是过了一段时间后开始增加轮询间隔时间-也许达到上限(1分钟,5分钟-对于你的用法来说似乎是最合适的)。增长不一定是线性的


一个更复杂的方法(可以结合monzee的建议,根据客户机的数量而变化)是允许服务器在下次轮询之前指定间隔。然后,服务器可以随时间增加intervale,您甚至可以动态更改算法,或响应网络负载。

我将有一个实例调用DB,如果存在较新的时间戳,则将新的时间戳放入应用程序变量中。然后让所有会话对照该应用程序变量进行检查。或者类似的。这样一来,只有一个innstance正在调用sql server,而客户端的数量并不重要


我还没有尝试过,这只是头上的第一个idéa,但我认为兑现时间戳并让客户检查兑现是一种方法,如何实现兑现(sql server cashe、应用程序变量等)我不知道什么是最好的。

关于如何实现,请注意,它不会持续检查新答案,只有当您在“您的答案”框中键入时才会检查

因此,关键是在启动更昂贵的过程以实际检索任何更改之前,首先执行计算成本较低的操作,以剔除常见的“无需更新”情况(例如,输入新答案或检查时间戳)


或者,根据应用程序的不同,您可以通过优化更改发布机制来解决此问题。例如,将更改(或更改摘要)放在RSS提要上,让客户端观看提要而不是实际应用程序可能是可行的。我们可以假设这将是相当有效的,因为这正是RSS设计和优化的目的,此外,它还有一个额外的好处,那就是使您的应用程序与世界其他地方的应用程序更具互操作性,而您只需付出很少或根本不需要付出任何代价。

我相信这种方法是基于服务器端套接字和客户端ajax/comet的组合。比如:

假设一个聊天应用程序有几个登录用户,并且每个用户都在通过对服务器端侦听器脚本的慢加载AJAX调用进行侦听

无论哪个浏览器获得刚刚输入的数据,都会通过对编写器脚本的ajax调用将其提交给服务器。该服务器更新数据库(或存储系统)并向指定的侦听器脚本发布套接字写入。后者随后获取新数据并将其发布回客户端浏览器

现在我还没有写这篇文章,现在我不知道浏览器对两个并发连接的限制是否/如何破坏上述逻辑

如果您有任何想法,我将不胜感激


哦,我忘了回答主要问题:通过使用长轮询技术,服务器负载应该会减少,因为连接可能会闲置更长的时间,如果它碰巧死了,最终会重新打开自己。有一些好的答案,所以这一定是个好问题。为什么不就这个问题投票?我认为这是个好问题。不仅仅是因为有这么多的网站显然是由从未问过的人写的!请告诉我为什么我的想法不好,这样我可以从中吸取教训//谢谢