mochiweb和gen_server

时间:2009-07-12 18:17:41

标签: erlang

[这只有在你看过Kevin Smith的'Erlang in Practice'截屏视频时才有意义

我是一个Erlang noob试图用嵌入式webserver [mochiweb]构建一个简单的Erlang / OTP系统。

我已经浏览了EIP截屏视频,并且我玩弄了使用new_mochiweb.erl脚本创建的简单mochiweb示例。

我正在试图弄清楚网络服务器应该如何与gen_server模块相关联。在EIP示例[Ch7]中,作者创建了一个web_server.erl gen_server进程并将mochiweb_http进程链接到它。然而在mochiweb项目中,mochiweb_http进程似乎是“独立的”;它似乎没有嵌入到单独的gen_server进程中。

我的问题是,这些模式中的一种应该优先于另一种吗?如果是这样,为什么?或者不重要?

提前致谢。

2 个答案:

答案 0 :(得分:4)

您将进程链接到应用程序的超级用户层次结构有两个原因:1)能够在崩溃时重新启动工作进程,以及2)在您停止应用程序时能够终止所有进程。

如前面的答案所述,1)不是http请求处理过程的情况。但是,2)是有效的:如果您单独使用您的进程,则无法保证在停止应用程序后将所有进程从VM中清除(考虑进程陷入无限循环,等待接收等等... )。

答案 1 :(得分:2)

在监督树中嵌入流程的原因是,如果失败,您可以重新启动它。

处理HTTP请求的进程正在响应外部生成的事件 - 在浏览器中。无法重新启动它 - 这是运行浏览器的人的特权 - 因此没有必要在OTP下运行它 - 您可以在没有监督的情况下生成它。