何时在Erlang/OTP应用程序中使用gen_服务器

何时在Erlang/OTP应用程序中使用gen_服务器,erlang,otp,mochiweb,Erlang,Otp,Mochiweb,在阅读了Joe Armstrong的书并观看了Kevin Smith的屏幕广播后,我构建了一个简单的OTP应用程序,它由一个gen_服务器和一个管理器组成,捆绑在一起作为OTP应用程序 现在我正在研究mochiweb,并使用新的_mochiweb.erl脚本创建了一个示例项目[helloworld]。浏览源代码时,我发现它与我的示例OTP应用程序(OTP应用程序在那里,主管在那里)没有什么不同,但有一个关键区别。。生成的helloworld.erl和helloworld_web.erl文件没有实

在阅读了Joe Armstrong的书并观看了Kevin Smith的屏幕广播后,我构建了一个简单的OTP应用程序,它由一个gen_服务器和一个管理器组成,捆绑在一起作为OTP应用程序

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


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

有一个gen_服务器,称为mochiweb_socket_服务器。生成的模块仅为接收到传入请求时要调用的gen_服务器的“回调模块”。

您使用OTP/gen_服务器处理处于重启策略下的进程-,即它们的重启由您控制

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


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

stdlib应用程序是OTP应用程序。启动时,它没有任何运行部件。它是一个普通的库应用程序,用于加载模块,因此其他OTP应用程序可以依赖它获取所有模块。所以当一个人仅仅介绍模块时,仍然有理由使用OTP。你是对的,我的语言有点草率。。。您应该使用目录和其他东西以正常的OTP方式打包所有代码,但有时正确的做法是生成一些东西,而不是使用gen_服务器启动它。