我一直很喜欢长轮询的想法;在我的开发服务器上,我玩过各种通知/新的发布系统,每个系统都使用 javascript 来保持连接并“等待”某种响应。我一直对这个的许多实现有疑问,它们都涉及重复轮询 mySQL 服务器以检查新行。
用于长轮询请求的专用服务器是可能的,但是为每个客户端连续轮询(大约每 3 秒似乎很常见)数据库服务器似乎非常浪费。对于一些相对微不足道的事情来说,这是一种巨大的资源浪费。
有连击方法吗?
最佳答案
如果您的具体问题是您试图避免通过数据库通知事件,您可能应该考虑使用共享内存或信号量。
您可以监控共享内存,而不是持续轮询数据库。当有东西写入数据库时(我假设是某种消息队列),您可以通过共享内存标记该事件。监听代码会检测到这一点,然后才建立数据库连接来检索消息。或者,您可以使用共享内存来完全取代数据库的使用。
php 信号量和共享内存函数的引用在这里 - http://uk.php.net/manual/en/ref.sem.php
关于PHP 长轮询,无需过多的数据库访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4834829/