2009-08-31 64 views
12

阅读Joe Armstrong的书并观看Kevin Smith截屏我已经构建了一个由单个gen_server和单个supervisor组成的简单OTP应用程序,作为OTP应用程序捆绑在一起。何时在Erlang/OTP应用程序中使用gen_server

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

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

回答

4

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

10

您使用OTP/gen_servers进行重启策略下的进程 - 即重启它们是在您的控制下

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

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

+3

stdlib应用程序是一个OTP应用程序。启动时,它没有任何运行部件。这是一个普通的库应用程序,用于加载它的模块,所以其他OTP应用程序可以依靠它来获取其所有模块。所以当我们引入模块时,仍然有使用OTP的理由。 – Christian 2009-08-31 22:27:05

+0

你的权利,我用我的语言是一个slapdash ...你应该使用目录和东西打包所有代码的正常OTP方式 - 但有时候做正确的事情只是产生的东西,而不是使用gen_server开始它。 – 2009-09-01 06:40:05

相关问题