我目前正在研究构建一个超过10k个用户在线连接的聊天系统。我遇到了一些技术和方法,比如jabber(XMPP),websockets,长时间轮询,推送。就目前而言,考虑到用户的数量,长时间轮询可能无法工作。我知道有很多方法可以做到这一点。我也知道Facebook和Google聊天系统是在XMPP上开发的。开发聊天/实时网络应用程序
如果有人能指出我正确的方向,我会很感激。我相信所有这些方法和技术都取决于项目的规模。我绝对需要性能和可扩展性。
我目前正在研究构建一个超过10k个用户在线连接的聊天系统。我遇到了一些技术和方法,比如jabber(XMPP),websockets,长时间轮询,推送。就目前而言,考虑到用户的数量,长时间轮询可能无法工作。我知道有很多方法可以做到这一点。我也知道Facebook和Google聊天系统是在XMPP上开发的。开发聊天/实时网络应用程序
如果有人能指出我正确的方向,我会很感激。我相信所有这些方法和技术都取决于项目的规模。我绝对需要性能和可扩展性。
我已经使用Socket.io连同NodeJS这样的聊天应用程序。它在适度的服务器上扩展到超过10K个并发用户,并且有很大的发展空间。
这取决于你的局限性。
做出决定时考虑以上所有因素。
就我个人而言,我发现XMPP是相当充足的,但对我的目的有点臃肿。因人而异。
感谢您的回复Lior! – paxtor
感谢您的回复Lior!在进行我的研究时,我遇到了Socket.io和NodeJS。在当前状态下:正在实施的语言是PHP,目标平台是浏览器,服务器很可能是Windows支持的,而且它是一个新的基础架构。根据我的发现,为这种类型的项目选择正确的技术至关重要。之前我只用ajax做过这样的小事。但是,我知道在这种情况下它不会起作用。推送服务器将是选择,毫无疑问。基于这个事实,你还推荐Socket.io和NodeJS吗? – paxtor
@Charlie:我之前没有在Windows服务器上尝试过nodeJS,所以我实在无法对此进行评论。关于你的目标是浏览器,在我看来,像NodeJS + Socket.io应该可以正常工作。如果你真的需要扩展,我真的不会尝试任何与PHP相关的推送,因为PHP不适合这种架构。 –
你正在比较一个水果篮和三个不同品种的桔子。
XMPP是您提到的实际上旨在支持聊天系统(其中许多存在)的唯一协议。其他是简单的异步消息协议/技术。 XMPP已通过BOSH支持基于http的聊天。毫无疑问,它还将在规范定稿时支持WebSockets。实际上这个已经写了draft,但是在这一点上它似乎是使用草稿的草稿,所以可能会有很少的(如果有的话)实现。
使用XMPP将允许您建立一个经过验证的技术来实现聊天系统,并允许您选择要在“底层”下使用的传输方式。你实际上并没有说你是否需要一个基于http的传输,但是对于XMPP,你可以使用基于tcp套接字的传输或基于http的传输(BOSH),并知道它将来也会支持WebSocket。
另一个好处是当然这是一个广泛使用的标准,它允许在几乎所有流行的(而不是流行的)语言和平台中重复使用existing clients, servers and libraries。
可伸缩性与您引用的数字无关,因为大多数(可能全部)现有的xmpp服务器将处理那么多用户。
你可能想看看服务器端来解决C10K问题。一种方法是nginx与[http push模块](http:// pushmodule。slact.net/) – ronalchn
谢谢Ronalchn!这就是我正在做的事情。但是有了所有的选择,选择最合适的选择有点困难。当我选择一个php框架时,这是同样的过程。那里有很多,但是它们具有可扩展性等限制。 – paxtor
非常接近的副本http://stackoverflow.com/questions/11131760/developing-a-mobile-chat-room-backend-use-xmpp-or-websocket/11142357#11142357 – Robin