使用Memcache构建PHP/Javascript聊天室

3
可能有重复:
将Memcache用作聊天消息的数据库缓存

我的一个朋友告诉我,他如何使用Memcache构建了一个PHP/Javascript实时聊天室,但我想不出当数据每隔几秒钟更新(可能)时,Memcache如何帮助。当然,他告诉我自己去弄清楚。

在这样一个应用程序中,Memcache会提供什么优势?(我不想知道如何确切地做到这一点,只是想知道在数据不断更新的应用程序中,Memcache如何加速处理速度。)


这是你的朋友吗?https://dev59.com/1ljUa4cB1Zd3GeqPPj4m - Radu
不是的。这个问题怎么会是与上面链接的那个问题的重复?在这个问题中,我正在询问如何使用memcache来开发聊天室。另一个问题是关于特定用途的memcache的。可能还有其他用途我不知道。 - TerranRich
1个回答

4

Memcache是PHP接口到memcached(内存对象缓存)的工具。

实际上,它并不是完成这项工作的正确工具。显然,他正在将数据存储为键 - 这可能比访问数据库更快,但仍然很糟糕。

如果您正在寻找实时聊天解决方案,我建议您研究以下技术。阅读相关文档,您会找到适合您需求的解决方案。

  • 使用带有聊天服务器的Flash(AS3)套接字,或者
  • HTML5 Web套接字,或者
  • COMET(Facebook使用此方法)。

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/)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接