38

作为 Elixir 和 web 领域的新手(没有 web 框架经验),我想知道,什么是 Plug?据我了解,Cowboy 是一个 Web 服务器(尽管是在 Erlang 中,而不是 Elixir),而 Phoenix 是一个用于构建 Web 应用程序的框架,但是 Plug 是从哪里来的呢?它是两者之间的抽象层,还是与 Phoenix 处于同一抽象层的插件系统?

4

3 回答 3

57

是两者之间的抽象层吗

对,就是这样!Plug 旨在成为不同 Web 服务器的通用适配器。目前我们只支持 Cowboy,但还有工作支持其他人。

Plug 还定义了如何将不同的组件插入在一起。类似于 Ruby 中的 Rack、Python 中的 WSGI、Clojure 中的 Ring 等等。

于 2014-10-12T09:56:18.387 回答
4

将插头视为指令管道。plugs 的目的是接收一个 conn,对其进行修改,然后返回修改后的 conn。您可以使用插件处理大量事情,从将标头附加到请求到在呈现某些内容之前验证用户是否经过身份验证。在我当前的项目中,我使用插件来处理我的请求的构建以及处理身份验证。

于 2019-05-04T03:14:46.397 回答
2

实际上,我已经对 Plug 和 Cowboy 以及它们如何在幕后工作进行了深入探讨,您可以在此处阅读,但基本摘要如下:

Cowboy是解析和处理任何用 Erlang 编写的传入和传出请求的实际 Web 服务器。Cowboy 与 Ranch 协同工作,后者处理传入的套接字连接并管理 TCP 协议

Plug只不过是帮助您构建 Web 端点的规范。它为您提供了处理 HTTP 请求、设置状态代码、发回响应等的工具

帮助我推理整个系统的一种方法是将 Plug 和 Cowboy 视为 Phoenix 的底层管道。

于 2021-03-10T09:28:15.520 回答