2014-05-01 223 views
1

有人告诉我,simple_one_for_one对聊天应用程序非常有用,因为每个聊天客户端都是一个服务器进程(gen_server)。这是正确的吗?为什么我们需要simple_one_for_one?

我想知道为什么我们需要它?为什么不创建只有一个中心服务器(gen_server)来处理所有聊天客户端通信?因为聊天客户端的数量可能非常大,所以只有一个服务器无法快速处理,使系统变慢?

我想也许创建太多像simple_one_for_one这样的服务器可能需要太多的系统资源。我是一个新的OTP人,所以我真的需要解释这一点。

回答

6

是的,这个想法是,你会有一个进程(gen_server)每个客户端。

这可以让您隔离一个客户端与另一个客户端的故障。

如果你让每个人都在一个进程中,你必须非常小心地处理所有可能出错的事情,并让你处理崩溃(从而断开你所有的客户端)。

每个客户端都有一个进程,您可以编写快乐路径并在出现问题时让其崩溃。最糟糕的情况是你放弃一个客户端。

过程相当便宜(没有像创建线程)。在现代机器上,你可以拥有数百万美元。

如果您的用户群数以百万计,我确信您最终会有多台服务器。因此,可以容易地在一个盒子上扩大到几十万到几百万的东西是很多的。

+0

如果我有一个gen_server来处理客户端请求,这个服务器连接并从mnesia获取数据,应该使用'simple_one_for_one'吗?因为我认为如果客户端由于某种原因导致服务器关闭,服务器的管理员将重新启动服务器,并且它可以继续处理客户端请求。我错了吗? –

+0

另外如果你只有一个gen_server来处理所有的聊天,那么你在系统中引入了一个严重的瓶颈问题,这大大减少了并行化。 – rvirding