Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
PHP+;AJAX和MySQL-每2秒查询一次,等待的时间太多_Php_Jquery_Mysql_Ajax - Fatal编程技术网

PHP+;AJAX和MySQL-每2秒查询一次,等待的时间太多

PHP+;AJAX和MySQL-每2秒查询一次,等待的时间太多,php,jquery,mysql,ajax,Php,Jquery,Mysql,Ajax,我有一个基本的HTML文件,使用jQuery的ajax,每2秒连接一次polling.php脚本 php只是连接到mysql,检查ID是否比我隐藏的、存储的当前ID更新,然后检查echo是否有任何新的内容。由于javascript每2秒就连接一次,因此我在等待的时间内获得了数千个连接,这只是为了我的客户端。这是因为我的脚本一次又一次地重新连接到MySQL。我试过mysql\u pconnect,但没有任何帮助 有没有办法让PHP打开1个连接,并继续使用它进行查询?而不是每次都重新连接,让所有这些

我有一个基本的HTML文件,使用jQuery的ajax,每2秒连接一次polling.php脚本

php只是连接到mysql,检查ID是否比我隐藏的、存储的当前ID更新,然后检查echo是否有任何新的内容。由于javascript每2秒就连接一次,因此我在等待的时间内获得了数千个连接,这只是为了我的客户端。这是因为我的脚本一次又一次地重新连接到MySQL。我试过mysql\u pconnect,但没有任何帮助


有没有办法让PHP打开1个连接,并继续使用它进行查询?而不是每次都重新连接,让所有这些时间等待连接。不确定如何在这里使其正常工作。

没有简单的方法可以做到这一点,因为pconnect不能跨多个网页调用工作。但是,一些最小化数据库吞吐量的方法是:

  • 降低轮询时间。(2秒可能有点过度?)


  • 有一个“主”PHP脚本,每n秒运行一次,从数据库中提取数据,并将其以适当的格式(序列化PHP数组、XML、HTML数据等)保存在文件系统中。(我建议写入一个临时文件,然后在现有文件上重命名,以尽量减少任何部分文件收集问题。)Ajax请求的PHP页面将只使用此数据文件中的信息

  • 在执行主PHP脚本方面,您可以使用cron,也可以在文件内容被认为太陈旧时让第一个请求页面的用户直接执行。(您可以通过函数使用数据文件的时间戳)我个人会使用后一种方法,因为cron在这方面做得太过分了


    如果需要的话,你可以更进一步,用它代替平面文件等。(也就是说,在这一阶段,这可能是一个过于复杂的解决方案。)

    事实上,我最终完成了基本的长轮询。我制作了一个简单的PHP脚本,用于无限while循环,它每2秒查询一次。如果它发现了一些新的东西,它会重复它,并打破循环。我的jquery只是ajax连接到它,并等待响应;在响应时,它会更新我的页面,并重新启动轮询。非常简单


    另外,长轮询方法还减少了浏览器内存问题,并大大减少了服务器上等待连接的时间。

    “(序列化PHP数组、XML、HTML数据等)”。memcached在这里不是很容易使用吗?@Keyo很大程度上取决于他的PHP安装中是否有memcached。:-)因此,我首先提到了基本的文件系统方法。理想的解决方案是使用comet服务器,但我还没有弄清楚如何让comet服务器为我查询数据库。现在我将把间隔时间提高到5秒,尽管这会扼杀任何接近实时的东西。@Ryan-我建议也使用master PHP master script方法-这将从根本上将轮询查询的数量减少到每“n”秒两到三次。感谢您的所有回复。实际上,我最终做了基本的长轮询。我制作了一个简单的PHP脚本,用于无限while循环,它每2秒查询一次。如果它发现了一些新的东西,它会重复它,并打破循环。我的jquery只是ajax连接到它,并等待响应;在响应时,它会更新我的页面,并重新启动轮询。非常简单!这获得了大量的视图,所以我想我应该再添加一点。在PHP中创建一个while循环,并在15-30秒后使其中断。出于超时原因,我建议保持在30秒以下。在while循环中,您可以每秒查询一个数据库,或者memcached,或者通过filemtime()轮询一个简单的文本文件以查看它是否已更改。当发生新情况时,可以对文件使用touch()来更新其时间。如果有新内容,回显“new”并退出脚本。如果没有,则在循环后回显“无”或其他内容并退出。然后在Javascript中,检查“NEW”和“NONE”。