14

阅读了 Joe Armstrong 的书并观看了 Kevin Smith 的截屏视频后,我构建了一个简单的 OTP 应用程序,它由一个 gen_server 和一个主管组成,捆绑在一起作为一个 OTP 应用程序。

现在我正在查看 mochiweb 并使用 new_mochiweb.erl 脚本创建了一个示例项目 [helloworld]。浏览源代码我发现它与我的示例 OTP 应用程序 [OTP 应用程序在那里,主管在那里] 没有什么不同,但有一个关键区别.. 生成的 helloworld.erl 和 helloworld_web.erl 文件没有实现 gen_server 行为,它们只是标准的 Erlang 模块。

我的印象是,在构建 OTP 应用程序组件时,推荐使用 gen_server 方法。为什么 mochiweb 可能使用 OTP 应用程序和主管行为,但避开 gen_server ?

4

2 回答 2

11

您将 OTP/gen_servers 用于处于重新启动策略下的进程 -即它们的重新启动在您的控制范围内

对于表示与 Web 浏览器的连接的进程,情况并非如此。如果该进程终止,则服务器无法重新启动它 - 因此在 OTP 下运行它是没有意义的。

Mochiweb(和 Yaws)都使用 gen_servers 绑定到侦听端口,然后生成一个无监督进程来处理新连接。

于 2009-08-31T21:48:17.293 回答
5

有一个gen_server,叫做mochiweb_socket_server。生成的模块只是接收传入请求时要调用的 gen_server 的“回调模块”。

于 2009-08-31T20:32:41.017 回答