为什么我们需要simple_one_for_one?

时间:2014-05-01 17:16:00

标签: erlang otp supervisor gen-server

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

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

我认为创建像simple_one_for_one这样的服务器太多可能会占用过多的系统资源。我是一个新的OTP人,所以我真的需要解释这一点。

1 个答案:

答案 0 :(得分:6)

是的,我们的想法是每个客户都有一个进程(gen_server)。

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

如果你在一个过程中拥有所有人,你必须非常小心处理所有可能出错的事情并使你的过程崩溃(因此,断开所有客户的连接)。

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

进程相当便宜(就像创建线程一样)。在现代机器上,您可以拥有数百万。

如果您的用户群数以百万计,那么我确定您最终会拥有多台服务器。因此,在盒子上容易扩展到数十万到数百万的东西是充足的。