[这只有在你看过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进程中。
我的问题是,这些模式中的一种应该优先于另一种吗?如果是这样,为什么?或者不重要?
提前致谢。
答案 0 :(得分:4)
您将进程链接到应用程序的超级用户层次结构有两个原因:1)能够在崩溃时重新启动工作进程,以及2)在您停止应用程序时能够终止所有进程。
如前面的答案所述,1)不是http请求处理过程的情况。但是,2)是有效的:如果您单独使用您的进程,则无法保证在停止应用程序后将所有进程从VM中清除(考虑进程陷入无限循环,等待接收等等... )。
答案 1 :(得分:2)
在监督树中嵌入流程的原因是,如果失败,您可以重新启动它。
处理HTTP请求的进程正在响应外部生成的事件 - 在浏览器中。无法重新启动它 - 这是运行浏览器的人的特权 - 因此没有必要在OTP下运行它 - 您可以在没有监督的情况下生成它。