考虑一个Web应用程序,例如Google Chat,其中服务器同时为数亿个客户端提供服务。在这样的应用程序中,服务器必须近乎实时地向客户端推送通知(在聊天示例中 - 传入消息,在线通知等)。
他们是如何实现的?很大一部分客户是基于浏览器的。我认为即使是Google的服务器,民意调查也会超负荷。那么,他们使用像Comet这样的东西吗?如果是这样 - 他们是否需要为每个65536个客户端分配一个服务器(每台机器的最大TCP连接数)?我知道有circumstance这种限制的方法,但我不知道它是如何实现的。
答案 0 :(得分:1)
单个应用程序/硬件/实例不处理聊天。 他们肯定使用许多具有负载平衡的实例,允许水平扩展聊天系统。它可能专用于区域或仅仅是单个集群系统(我相信它专注于区域内但仍聚集在区域内)。 同样,您可以拥有与硬件和网络一样多的连接但不能处理64k。 因为64k(实际上少于那个)是关于绑定套接字(服务器套接字,而不是客户端套接字)。
对于谷歌和基于支持的浏览器,他们肯定使用混合技术来交流选择最强大的基于浏览器支持。这可以是长轮询,套接字甚至最老的:简单的ajax。
例如,Facebook聊天基于erlang。使用erlang有许多例子,有超过百万个连接。
答案 1 :(得分:0)
我不知道谷歌如何处理这个问题,他们可能不会告诉我们。但是,今天你可以处理http流,websockets或长轮询来构建这样的应用程序。举个例子Atmosphere framework
是构建“实时”,高效且可扩展的Web应用程序的工具。