2012-09-28 89 views
1

我目前正在研究构建一个超过10k个用户在线连接的聊天系统。我遇到了一些技术和方法,比如jabber(XMPP),websockets,长时间轮询,推送。就目前而言,考虑到用户的数量,长时间轮询可能无法工作。我知道有很多方法可以做到这一点。我也知道Facebook和Google聊天系统是在XMPP上开发的。开发聊天/实时网络应用程序

如果有人能指出我正确的方向,我会很感激。我相信所有这些方法和技术都取决于项目的规模。我绝对需要性能和可扩展性。

+0

你可能想看看服务器端来解决C10K问题。一种方法是nginx与[http push模块](http:// pushmodule。slact.net/) – ronalchn

+0

谢谢Ronalchn!这就是我正在做的事情。但是有了所有的选择,选择最合适的选择有点困难。当我选择一个php框架时,这是同样的过程。那里有很多,但是它们具有可扩展性等限制。 – paxtor

+0

非常接近的副本http://stackoverflow.com/questions/11131760/developing-a-mobile-chat-room-backend-use-xmpp-or-websocket/11142357#11142357 – Robin

回答

2

我已经使用Socket.io连同NodeJS这样的聊天应用程序。它在适度的服务器上扩展到超过10K个并发用户,并且有很大的发展空间。

这取决于你的局限性。

  • 您打算使用哪种硬件?
  • 哪个操作系统可以为您的服务器供电?
  • 您定位的是哪个客户端平台?
  • 您是否有现成的基础设施需要适应?
  • 你有一个以前选择的编程语言?
  • 您的团队成员拥有的现有技能以及您的团队在必要时采用新平台和语言的能力。

做出决定时考虑以上所有因素。

就我个人而言,我发现XMPP是相当充足的,但对我的目的有点臃肿。因人而异。

+0

感谢您的回复Lior! – paxtor

+0

感谢您的回复Lior!在进行我的研究时,我遇到了Socket.io和NodeJS。在当前状态下:正在实施的语言是PHP,目标平台是浏览器,服务器很可能是Windows支持的,而且它是一个新的基础架构。根据我的发现,为这种类型的项目选择正确的技术至关重要。之前我只用ajax做过这样的小事。但是,我知道在这种情况下它不会起作用。推送服务器将是选择,毫无疑问。基于这个事实,你还推荐Socket.io和NodeJS吗? – paxtor

+0

@Charlie:我之前没有在Windows服务器上尝试过nodeJS,所以我实在无法对此进行评论。关于你的目标是浏览器,在我看来,像NodeJS + Socket.io应该可以正常工作。如果你真的需要扩展,我真的不会尝试任何与PHP相关的推送,因为PHP不适合这种架构。 –

1

你正在比较一个水果篮和三个不同品种的桔子。

XMPP是您提到的实际上旨在支持聊天系统(其中许多存在)的唯一协议。其他是简单的异步消息协议/技术。 XMPP已通过BOSH支持基于http的聊天。毫无疑问,它还将在规范定稿时支持WebSockets。实际上这个已经写了draft,但是在这一点上它似乎是使用草稿的草稿,所以可能会有很少的(如果有的话)实现。

使用XMPP将允许您建立一个经过验证的技术来实现聊天系统,并允许您选择要在“底层”下使用的传输方式。你实际上并没有说你是否需要一个基于http的传输,但是对于XMPP,你可以使用基于tcp套接字的传输或基于http的传输(BOSH),并知道它将来也会支持WebSocket。

另一个好处是当然这是一个广泛使用的标准,它允许在几乎所有流行的(而不是流行的)语言和平台中重复使用existing clients, servers and libraries

可伸缩性与您引用的数字无关,因为大多数(可能全部)现有的xmpp服务器将处理那么多用户。

+0

伟大的信息,罗宾! – paxtor

+0

伟大的信息,罗宾!正如你可以收集的,我不是这个话题的专家,也不是这个系统开发需要采取的方法。然而,事情正在开始清理。根据你的回答和研究,似乎我需要的不仅仅是一个http服务器(即apache)和一个数据库来照顾这样的事情。我的理解是因为我之前尝试过一些类似的项目,使用带有Flash Media服务器的Apache(RTMP协议)通过http提供实时视频流。看来我现在需要做类似的事情。我很欣赏XMPP上的信息! – paxtor