何时在Erlang/OTP应用程序中使用gen_server

Jus*_*tin 13 erlang erlang-otp mochiweb

阅读了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?

Gor*_*rie 10

您将OTP/gen_servers用于重启策略下的进程 - 即重启它们在您的控制之下.

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

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

  • stdlib应用程序是一个OTP应用程序.启动时,它没有任何运行部件.它是一个普通的库应用程序,用于它加载的模块,因此其他OTP应用程序可以依赖它来获取所有模块.因此,当只引入模块时,仍然有理由使用OTP. (3认同)

Zed*_*Zed 5

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