我一直很喜欢漫长的民意调查;在我的开发服务器上,我玩过各种通知/新帖子系统,每个系统使用javascript来保持连接并“等待”某种响应。我总是遇到许多这方面的问题,它们都涉及重复轮询mySQL服务器以检查新行。
用于长轮询请求的专用服务器是可能的,但是对于每个客户端连续轮询(大约3秒似乎很常见)数据库服务器似乎非常浪费。对于相对微不足道的东西来说,这是一种巨大的资源浪费。
有击球方式吗?
答案 0 :(得分:5)
如果您的具体问题是您试图避免通过数据库通知事件,那么您可能应该考虑使用共享内存或信号量。
而不是连续轮询数据库,而是监视共享内存。当某些东西写入db(我假设某种消息队列)时,您可以通过共享内存标记该事件。侦听代码会检测到这一点,然后才建立数据库连接以检索消息。或者,您可以使用共享内存来完全替换数据库的使用。
php信号量和共享内存函数的引用在这里 - http://uk.php.net/manual/en/ref.sem.php
答案 1 :(得分:4)
我会使用一些nosql来通知有新数据。 Redis有pub/sub和blocking list。
您还可以使用例如memcache,并在数据可用时创建新密钥。
答案 2 :(得分:0)
答案 3 :(得分:0)
数据缓存,我喜欢Zend Server中的那个,它大大减少了从数据库中提取
答案 4 :(得分:0)
每当您插入或更新数据库时,都会为该数据库的该字段创建一个缓存。您可以使用任何简单的基于PHP的缓存(http://hycus.com/2011/03/31/hcache-a-cache-system-for-php/)。
然后,您可以使用JQUERY连续轮询该缓存。
答案 5 :(得分:-1)
可以考虑在后台使用闪存电影,使用套接字与服务器保持连续连接。 Java也支持套接字,因此也可以是嵌入页面的java applet。