我有一个基本的超文本标记语言文件,使用jQuery的ajax,它每隔2秒连接到我的polling.php脚本。
polling.php只是简单地连接到mysql,检查ID是否比我隐藏的、存储的当前ID更新,然后使用echo检查是否有新的ID。因为javascript每2秒连接一次,所以我在TIME_WAIT中得到了成千上万的连接,仅仅是为了我的客户。这是因为我的脚本一次又一次地重新连接到MySQL。我试过mysql_pconnect,但没有任何帮助。
有没有办法让PHP打开1个连接,然后继续使用它进行查询?而不是每次都重新连接并建立所有这些TIME_WAIT连接。不确定要在这里做什么才能正常工作。
发布于 2010-12-14 06:41:30
实际上,我最终完成了基本的长轮询。我创建了一个简单的PHP脚本来执行一个无限的while循环,它每2秒查询一次。如果它发现了新的东西,它会将其回显出来,并打破循环。我的jquery仅仅是ajax连接到它,并等待响应;响应时,它更新我的页面,并重新启动轮询。非常简单!
PS,长轮询方法还可以减少浏览器内存问题,并显著减少服务器上的TIME_WAIT连接。
发布于 2010-12-09 06:57:44
没有简单的方法可以做到这一点,因为pconnect不能跨多个网页调用工作。但是,将数据库吞吐量降至最低的一些方法包括:
就执行主PHP脚本而言,您可以使用cron,或者在文件内容被认为太陈旧时让第一个请求页面的用户执行。(您可以通过filemtime函数将数据文件的时间戳用于此目的。)我个人会使用后一种方法,因为cron在这方面的用处太大了。
如果需要,您可以进一步使用memcached而不是平面文件,等等。(也就是说,在这个阶段,这可能是一个过于复杂的解决方案。)
https://stackoverflow.com/questions/4393118
复制相似问题