Erlang 为EWGI兼容性而设计

Erlang 为EWGI兼容性而设计,erlang,Erlang,我试图理解人们应该如何为兼容性设计中间件。鉴于目前还没有兼容EWGI的web服务器,我只能征求您的意见 如果我正确理解规范,中间件将接收一条#ewgi_context{}记录作为输入,并返回另一条相同类型的记录 问题是,中间件将被调用两次,还是应该自己递归调用其余的中间件 另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应?(例如,文件服务中间件命中文件,因此调用视图中间件没有意义)。由于我的视图的结果是一个上下文记录,其他中间件(或服务器)应该如何判断它是最终响应 鉴于目

我试图理解人们应该如何为兼容性设计中间件。鉴于目前还没有兼容EWGI的web服务器,我只能征求您的意见

如果我正确理解规范,中间件将接收一条#ewgi_context{}记录作为输入,并返回另一条相同类型的记录

问题是,中间件将被调用两次,还是应该自己递归调用其余的中间件

另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应?(例如,文件服务中间件命中文件,因此调用视图中间件没有意义)。由于我的视图的结果是一个上下文记录,其他中间件(或服务器)应该如何判断它是最终响应

鉴于目前还没有兼容EWGI的web服务器,我只能征求您的意见

不需要存在与EWGI兼容的web服务器,因为统一对不同web服务器的访问是EWGI的角色。这是EWGI的核心思想

另一方面,如果您指的是“符合EWGI的web框架”,那么实际上有两个(或更多?)web框架支持EWGI。这些是和嘟嘟

或者它应该自己递归调用其余的中间件

中间件应该以递归的方式相互调用,因此中间件的角色是决定下一步要做什么

另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应

为了回答您的最后一个问题,我认为由于中间件之间以递归方式相互调用,因此实现这一点的最简单方法是,如果答案是最终的,则不调用其他中间件,并将#ewgi_context{}记录返回到ewgi层

鉴于目前还没有兼容EWGI的web服务器,我只能征求您的意见

不需要存在与EWGI兼容的web服务器,因为统一对不同web服务器的访问是EWGI的角色。这是EWGI的核心思想

另一方面,如果您指的是“符合EWGI的web框架”,那么实际上有两个(或更多?)web框架支持EWGI。这些是和嘟嘟

或者它应该自己递归调用其余的中间件

中间件应该以递归的方式相互调用,因此中间件的角色是决定下一步要做什么

另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应


为了回答您的最后一个问题,我认为因为中间件之间是递归调用的,所以实现这一点的最简单方法是,如果答案是最终的,则不调用其他中间件,并将#ewgi_context{}记录返回到ewgi层。

中间件可以根据情况使用迭代或递归方法

迭代方法的一个例子是:

其他简单的例子见

一般来说,我更喜欢迭代方法,但是如果您有一个依赖于其他中间件的中间件,那么递归方法可能更好

另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应?(例如,文件服务中间件命中文件,因此调用视图中间件没有意义)。由于我的视图的结果是一个上下文记录,其他中间件(或服务器)应该如何判断它是最终响应

没有提议的办法。如果使用递归方法,只需返回ewgi_上下文即可。在迭代方法中,视图或视图调用者可以检查响应主体和标题是否在ewgi_上下文中设置,并决定相应的操作

一般来说,我认为ewgi是用于web的unix管道。每个中间件都会得到一个请求和响应(类似于管道中的stdin和stdout),它会修改上下文(如果需要)并返回它


希望这有帮助。

中间件可以根据情况使用迭代或递归方法

迭代方法的一个例子是:

其他简单的例子见

一般来说,我更喜欢迭代方法,但是如果您有一个依赖于其他中间件的中间件,那么递归方法可能更好

另外,是否有任何建议的方法让中间件通知其余的中间件,其结果应该是最终响应?(例如,文件服务中间件命中文件,因此调用视图中间件没有意义)。由于我的视图的结果是一个上下文记录,其他中间件(或服务器)应该如何判断它是最终响应

没有提议的办法。如果使用递归方法,只需返回ewgi_上下文即可。在迭代方法中,视图或视图调用者可以检查响应主体和标题是否在ewgi_上下文中设置,并决定相应的操作

一般来说,我认为ewgi是用于web的unix管道。每个中间件都会得到一个请求和响应(类似于管道中的stdin和stdout),它会修改上下文(如果需要)并返回它


希望这有帮助。

谢谢你的回答。我所说的兼容EWGI的web服务器是指以中间件列表作为输入的web服务器。看看您的示例,Erlang Web是以一种方式实现的(请参阅eptic中的e_mod_ewgi:do/1),而Beepep是以另一种方式实现的(请参阅Beepep:run/2)。另外,看看ewgi_应用程序:在ewgi sources()中运行/1,它似乎支持迭代(非递归方法)。感谢您的回答。我所说的兼容EWGI的web服务器是指以中间件列表作为输入的web服务器。看看你的考试