我正在为一家公司构建聊天系统,我想知道构建系统的最佳方式是什么?可扩展的基于PHP(基于AJAX)的聊天系统的最佳方法
当前的设置,我们拥有的是PHP和Memcacheq一个Nginx的HTTP服务器(作为附加聊天消息发送到用户自己的队列中的消息队列)。然后我们轮询Nginx服务器(通过Comet风格的请求)并查询消息队列的更新。
是否使用消息队列,如Memcacheq来处理既有用户到用户和站点范围内的聊天或者是它最好只是坚持MySQL的聊天系统是一个好主意?
谢谢!
我正在为一家公司构建聊天系统,我想知道构建系统的最佳方式是什么?可扩展的基于PHP(基于AJAX)的聊天系统的最佳方法
当前的设置,我们拥有的是PHP和Memcacheq一个Nginx的HTTP服务器(作为附加聊天消息发送到用户自己的队列中的消息队列)。然后我们轮询Nginx服务器(通过Comet风格的请求)并查询消息队列的更新。
是否使用消息队列,如Memcacheq来处理既有用户到用户和站点范围内的聊天或者是它最好只是坚持MySQL的聊天系统是一个好主意?
谢谢!
我期望Memcacheq能够比MySQL更好地执行。当你有几分陈旧的数据(或坏的数据库设计,增加查询执行时间)
Memcache的才有用。在你的情况下(聊天系统),数据将是新鲜的,添加Memcache只会使我看到的东西复杂化(读取性能降低)。将memcache看作mysql和php之间的中间件(在RAM上)。如果数据已过时,那么行程时间会减少,因为PHP不必去mysql,但在新数据的情况下,负载实际上会增加(因为memcache也需要从PHP获取更改)。
总之,我不会建议使用内存缓存的聊天系统。会推荐更多地搜索网页。好的帖子在http://blog.tech.stylefeeder.com/2008/08/22/memcached-vs-mysql/
Memcacheq是一个伟大的工具,它可以帮助避免网络requsts的延迟。 它可以充当php和mysql之间的缓冲区,但它不是mysql的替代品。 Memcacheq还可以使扩展更容易,因为可能会有多个分布式消息使用者。
我建议把它放在高负载的php请求之间,将数据保存到mysql并执行耗时的操作。这将加快用户的页面加载速度,并将免除您的Web服务器长时间的请求。
Memcacheq非常快。它不会花费太多资源的开发
目前工作的方式是所有的聊天消息都存储在MySQL表中,但在发送消息的时候,关于数据库条目的信息被输入到特定的Memcache消息队列中并传送给用户几乎是实时的。这似乎是一种比持续轮询数据库更新更有效的方法。 感谢您的想法! – Simon 2010-03-19 23:48:19
试试这个:http://pushmodule.slact.net/。 Nginx会照顾到彗星的东西,你所有的php应用程序需要做的就是向模块发送HTTP请求。
是否使用MemcacheQ而不仅仅是常规的Memcache设置有什么不同?我现在看看那个页面 - 谢谢! – Simon 2010-03-19 10:15:36
据我所知,MemcacheQ只是提供排队功能的memcache的一个包装。不应该有任何区别。 – pinaki 2010-03-19 10:47:49
如果发生聊天消息,请将其存储在mysql中并进行缓存。那么在阅读侧查询应该从chache读取值。 ? – 2012-01-09 18:32:56