2

考虑一个 Web 应用程序,例如 Google Chat,其中的服务器同时为数亿客户提供服务。在这样的应用程序中,服务器必须近乎实时地向客户端推送通知(在聊天示例中 - 传入消息、存在通知等)。

他们如何实施?很大一部分客户端是基于浏览器的。我想轮询甚至会使 Google 的服务器超载。那么,他们使用的是像 Comet 这样的东西吗?如果是这样 - 他们是否需要为每 65536 个客户端分配一个服务器(每台机器的最大 TCP 连接数)?我知道有办法解决这个限制,但我不知道它是如何实现的。

4

2 回答 2

1

聊天不是由单个应用程序/硬件/实例处理的。他们肯定会使用许多具有负载平衡功能的实例,从而可以水平扩展聊天系统。它可能专用于区域或仅用于单个集群系统(我相信它在区域内是专用的,但仍然在区域内集群)。您也可以拥有硬件和网络可以处理的尽可能多的连接,但不是 64k。因为 64k(实际上少于那个)是关于绑定套接字(服务器套接字,但不是客户端套接字)。

如果是 google 并基于支持的浏览器,他们肯定会使用混合技术来交流选择基于浏览器支持的最强大的技术。这可以是长轮询、套接字,甚至是最古老的一种:简单的 ajax。

例如 facebook 聊天也是基于 erlang 的。并且使用 erlang 有很多例子有超过百万个连接。

于 2012-04-19T14:55:59.227 回答
0

我不知道谷歌如何处理这个问题,他们可能不会告诉我们。但是,今天你可以处理 http 流、websockets 或长轮询来构建这样的应用程序。给你一个例子Atmosphere 框架

是构建“实时”、高效和可扩展的 Web 应用程序的工具。

于 2012-04-19T12:39:49.800 回答