【问题标题】:Best approach for a scalable PHP (AJAX based) chat system可扩展 PHP(基于 AJAX)聊天系统的最佳方法
【发布时间】:2011-01-29 08:32:07
【问题描述】:

我正在为一家公司构建聊天系统,我想知道构建系统的最佳方式是什么?

我们当前的设置是一个带有 PHP 和 Memcacheq 的 Nginx HTTP 服务器(作为将聊天消息附加到用户自己的队列的消息队列)。然后我们轮询 Nginx 服务器(通过 Comet 样式请求)并查询消息队列以获取更新。

使用 Memcacheq 之类的消息队列来处理同时具有用户对用户和站点范围的聊天的聊天系统是个好主意,还是最好只使用 MySQL?

谢谢!

【问题讨论】:

    标签: php comet chat scalable


    【解决方案1】:

    Memcache 仅在您有一些陈旧的数据(或糟糕的数据库设计以增加查询执行时间)时才有用。在您的情况下(聊天系统),数据将是新鲜的,据我所知,添加 Memcache 只会使事情复杂化(读取性能下降)。将 memcache 视为 mysql 和 php 之间的中间件(在 RAM 上)。如果数据过时,则行程时间会减少,因为 PHP 不必转到 mysql,但如果是新数据,负载实际上会增加(因为 memcache 还需要从 PHP 获取更改)。

    总之,我不建议将 memcache 用于聊天系统。建议多上网搜索。 http://blog.tech.stylefeeder.com/2008/08/22/memcached-vs-mysql/的好帖子

    【讨论】:

    • 我使用 MemcacheQ 而不仅仅是常规的 Memcache 设置有什么不同吗?我现在看看那个页面 - 谢谢!
    • 据我所知,MemcacheQ 只是提供排队功能的 memcache 的包装器。应该没有任何区别。
    • what if : 发送聊天消息时,将其存储在 mysql 中并缓存。然后在读取端,查询应该从 chache 读取值。 ?
    【解决方案2】:

    我希望 Memcacheq 的性能比 MySQL 好得多。

    【讨论】:

      【解决方案3】:

      Memcacheq 是一个很棒的工具,可以帮助避免 Web 请求的延迟。 它可以充当 php 和 mysql 之间的缓冲区,但不能替代 mysql。 Memcacheq 还可以使扩展更容易,因为可能有多个分布式消息消费者。

      我建议将它放在高负载的 php 请求之间,将数据保存到 mysql 和执行耗时的操作。这将加快用户的页面加载速度,并将您的网络服务器从长请求中解放出来。

      Memcacheq 非常快。不会占用太多资源

      【讨论】:

      • 目前的工作方式是将所有聊天消息存档在 MySQL 表中,但在发送消息时,将有关 db 条目的信息输入到特定的 Memcache消息队列并近乎实时地传递给用户。这似乎是一种比不断轮询数据库以获取更新更有效的方法。顺便感谢您的想法!
      【解决方案4】:

      试试这个:http://pushmodule.slact.net/。 Nginx 会处理彗星的东西,而你的 php 应用程序需要做的就是向模块发送 HTTP 请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-15
        • 2013-08-25
        • 2013-02-12
        • 2012-05-21
        • 1970-01-01
        • 2021-03-08
        • 2014-06-01
        • 1970-01-01
        相关资源
        最近更新 更多