首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL的PHP+AJAX -每2秒查询一次,在TIME_WAIT中查询太多

使用MySQL的PHP+AJAX -每2秒查询一次,在TIME_WAIT中查询太多
EN

Stack Overflow用户
提问于 2010-12-09 06:42:05
回答 2查看 1.9K关注 0票数 2

我有一个基本的超文本标记语言文件,使用jQuery的ajax,它每隔2秒连接到我的polling.php脚本。

polling.php只是简单地连接到mysql,检查ID是否比我隐藏的、存储的当前ID更新,然后使用echo检查是否有新的ID。因为javascript每2秒连接一次,所以我在TIME_WAIT中得到了成千上万的连接,仅仅是为了我的客户。这是因为我的脚本一次又一次地重新连接到MySQL。我试过mysql_pconnect,但没有任何帮助。

有没有办法让PHP打开1个连接,然后继续使用它进行查询?而不是每次都重新连接并建立所有这些TIME_WAIT连接。不确定要在这里做什么才能正常工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-14 06:41:30

实际上,我最终完成了基本的长轮询。我创建了一个简单的PHP脚本来执行一个无限的while循环,它每2秒查询一次。如果它发现了新的东西,它会将其回显出来,并打破循环。我的jquery仅仅是ajax连接到它,并等待响应;响应时,它更新我的页面,并重新启动轮询。非常简单!

PS,长轮询方法还可以减少浏览器内存问题,并显著减少服务器上的TIME_WAIT连接。

票数 1
EN

Stack Overflow用户

发布于 2010-12-09 06:57:44

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

  1. 降低轮询时间。(2秒可能有点excessive?)
  2. Have一个“主”PHP脚本,它每隔'n‘秒运行一次,从数据库中提取数据并以适当的格式保存(序列化的PHP数组、XML、HTML数据等)。)在文件系统中。(我建议写入一个临时文件,然后重命名现有文件,以最大限度地减少任何部分文件收集问题。)然后,Ajax请求的PHP页面将简单地使用该数据文件中的信息。

就执行主PHP脚本而言,您可以使用cron,或者在文件内容被认为太陈旧时让第一个请求页面的用户执行。(您可以通过filemtime函数将数据文件的时间戳用于此目的。)我个人会使用后一种方法,因为cron在这方面的用处太大了。

如果需要,您可以进一步使用memcached而不是平面文件,等等。(也就是说,在这个阶段,这可能是一个过于复杂的解决方案。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4393118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档