将Memcache用作聊天消息的数据库缓存
我的一个朋友告诉我,他如何使用Memcache构建了一个PHP/Javascript实时聊天室,但我想不出当数据每隔几秒钟更新(可能)时,Memcache如何帮助。当然,他告诉我自己去弄清楚。
在这样一个应用程序中,Memcache会提供什么优势?(我不想知道如何确切地做到这一点,只是想知道在数据不断更新的应用程序中,Memcache如何加速处理速度。)
我的一个朋友告诉我,他如何使用Memcache构建了一个PHP/Javascript实时聊天室,但我想不出当数据每隔几秒钟更新(可能)时,Memcache如何帮助。当然,他告诉我自己去弄清楚。
在这样一个应用程序中,Memcache会提供什么优势?(我不想知道如何确切地做到这一点,只是想知道在数据不断更新的应用程序中,Memcache如何加速处理速度。)
Memcache是PHP接口到memcached(内存对象缓存)的工具。
实际上,它并不是完成这项工作的正确工具。显然,他正在将数据存储为键 - 这可能比访问数据库更快,但仍然很糟糕。
如果您正在寻找实时聊天解决方案,我建议您研究以下技术。阅读相关文档,您会找到适合您需求的解决方案。
Flash(AS3)套接字: 有很多种方式来构建Actionscript 3聊天系统。如果您使用现有的解决方案之一,例如Smartfox,那么实际上非常容易。您甚至可以使用External Interface在每次接收到消息时触发Javascript事件。
HTML5 Web套接字 由于对此的支持相当脆弱,因此我建议您通过Flash进行优雅降级。您可以使用以下库的示例:https://github.com/gimite/web-socket-js/
COMET /长轮询 这是一种非常有趣的方法。实际上,您将通过不返回任何数据来“阻止”服务器端的HTTP请求,直到有一些可用的数据为止。例如:
while(!d = data()) {
// no data...
}
return "{data : d}"
在大多数情况下,您的浏览器会安静地等待某些事件的发生。一旦接收到数据,浏览器将关闭连接,然后您可以处理数据并重新打开连接(发送新的ajax请求),以便您可以监听新的事件!
为了实现这个目标,我建议使用非阻塞服务器,如Tornado(http://www.tornadoweb.org/)。