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

时间:2009-08-31 20:14:15

标签: 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?

2 个答案:

答案 0 :(得分:10)

对于处于重启策略下的进程使用OTP / gen_servers - 即重新启动它们在您的控制中

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

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

答案 1 :(得分:4)

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