mochiweb 和 gen_server

发布于 2024-07-26 23:24:07 字数 469 浏览 2 评论 0原文

[只有当您看过 Kevin Smith 的“Erlang 实践”截屏视频时,这才有意义]

我是一名 Erlang 菜鸟,试图构建一个带有嵌入式 Web 服务器 [mochiweb] 的简单 Erlang/OTP 系统。

我已经浏览了 EIP 截屏视频,并且尝试过使用 new_mochiweb.erl 脚本创建的简单 mochiweb 示例。

我试图弄清楚网络服务器应该如何与 gen_server 模块相关。 在 EIP 示例 [Ch7] 中,作者创建了一个 web_server.erl gen_server 进程并将 mochiweb_http 进程链接到它。 然而,在 mochiweb 项目中,mochiweb_http 进程似乎是“独立的”; 它似乎没有嵌入到单独的 gen_server 进程中。

我的问题是,这些模式中的一种应该优先于另一种吗? 如果是这样,为什么? 或者没关系?

提前致谢。

[This will only make sense if you've seen Kevin Smith's 'Erlang in Practice' screencasts]

I'm an Erlang noob trying to build a simple Erlang/OTP system with embedded webserver [mochiweb].

I've walked through the EIP screencasts, and I've toyed with simple mochiweb examples created using the new_mochiweb.erl script.

I'm trying to figure out how the webserver should relate to the gen_server modules. In the EIP examples [Ch7], the author creates a web_server.erl gen_server process and links the mochiweb_http process to it. However in a mochiweb project, the mochiweb_http process seems to be 'standalone'; it doesn't seem to be embedded in a separate gen_server process.

My question is, should one of these patterns be preferred over the other ? If so, why ? Or doesn't it matter ?

Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你げ笑在眉眼 2024-08-02 23:24:07

将进程链接到应用程序的主管层次结构有两个原因:1)能够在工作进程崩溃时重新启动,2)能够在停止应用程序时终止所有进程。

正如前面的答案所说,1)http 请求处理过程并非如此。 然而,2)是有效的:如果你让你的进程单独存在,你不能保证在停止你的应用程序后所有的进程都会从虚拟机中清除(想想陷入无限循环、等待接收等的进程...... )。

You link processes to the supervisor hierarchy of your application for two reasons: 1) to be able to restart your worker processes if they crash, and 2) to be able to kill all your processes when you stop the application.

As the previous answer says, 1) is not the case for http requests handling processes. However, 2) is valid: if you let your processes alone, you can't guarantee that all your processes will be cleared from the VM after stopping your application (think of processes stuck in endless loops, waiting in receives, etc...).

淡淡離愁欲言轉身 2024-08-02 23:24:07

将进程嵌入到监督树中的原因是,如果它失败,您可以重新启动它。

处理 HTTP 请求的进程正在响应外部(在浏览器中)生成的事件。 无法重新启动它 - 这是运行浏览器的人的特权 - 因此没有必要在 OTP 下运行它 - 您可以在没有监督的情况下生成它。

The reason to embed a process in a supervision tree is so that you can restart it if it fails.

A process that handles an HTTP request is responding to an event generated externally - in a browser. It is not possible to restart it - that is the prerogative of the person running the browser - therefore it is not necessary to run it under OTP - you can just spawn it without supervision.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文