作为Elixir和Web领域的新手(一般没有Web框架经验)我想知道什么是Plug?据我所知,Cowboy是一个Web服务器(虽然在Erlang,而不是Elixir),而Phoenix是一个用于构建Web应用程序的框架,但是插件是从哪里进来的?它是两者之间的抽象层,还是与Phoenix相同的抽象层中的插件系统?
答案 0 :(得分:45)
它是两者之间的抽象层
是的,确切地说!插件是适用于不同Web服务器的通用适配器。目前我们只支持牛仔,但有工作支持其他人。
Plug还定义了如何将不同的组件插在一起。类似于Ruby中的Rack,Python中的WSGI,Clojure中的Ring等等。
答案 1 :(得分:1)
实际上,我已经写了一篇关于 Plug 和 Cowboy 以及它们在引擎盖下如何工作的深入探讨,您可以阅读here,但基本摘要如下:
Cowboy 是解析和处理任何用 Erlang 编写的传入和传出请求的实际网络服务器。 Cowboy 与 Ranch 协同工作,后者处理传入的套接字连接并管理 TCP 协议
Plug 只不过是帮助您构建 Web 端点的规范。它为您提供了处理 HTTP 请求、设置状态代码、发回响应等的工具
帮助我推理整个系统的一种方法是将 Plug and Cowboy 视为 Phoenix 的底层管道。
答案 2 :(得分:0)
将插头视为一条指令流水线。插件的目的是引入conn,对其进行修改,然后返回修改后的conn。您可以使用插件处理大量事情,从附加标头到请求,再到在呈现某些事物之前验证用户是否已通过身份验证。在我当前的项目中,我正在使用插件来处理请求的构造以及身份验证。