我目前正在开发一个轻量级PHP框架,用于我的网站的一些高请求ajax,并遇到了一个让我完全难过的有趣问题. ajax用于一系列通知,因此javascript每30秒发送一条新信息的ajax请求.这个ajax在整个站点的每个页面上都是活动的,所以我意识到它有很多请求,因为有几百个用户在任何特定时刻都在浏览站点,许多用户打开了几个窗口.
语法明智一切都很完美.问题是,当我为我的社区激活ajax时,MysqL数据库中有30-40个SLEEP命令.所有这些似乎都忽略了10秒的设置超时.因此,它会影响整个网站的性能.
我的理解是,剩余睡眠命令是未关闭的连接的结果.我使用MysqLi面向对象的类,并使用我自己的一些函数扩展它.一切都是通过教科书,并根据文档进行了双重检查,我确保MysqLi类的每一小部分都被关闭并发布.
如果任何人对这种效果有任何智慧或经验,我将非常感谢任何建议.
解决方法:
您是否尝试过推送方法与当前的拉/轮询方法相比?看看Comet:
> Comet a new approach to AJAX applications
> Comet (wikipedia)
> Comet programming: Using AJAX to simulate server push
> Ajax Push Engine
但是,存在一些缺点,主要的缺点是您必须维护打开的连接,而某些浏览器会限制您可以维护的连接数.以下文章讨论了使用Comet的优缺点,并提出了一种混合轮询方法:
这是一个讨论彗星的stackoverflow问题: