2009-08-13 69 views
1

我試圖瞭解應該如何設計中間件的EWGI兼容性。鑑於目前還沒有符合EWGI的網絡服務器,我只能徵求您的意見。設計EWGI兼容性

如果我理解了規範。正確地說,中間件接收#ewgi_context {}記錄作爲輸入,並返回相同類型的另一條記錄。

問題是,中間件將被調用兩次,如django,還是應該自己遞歸地調用其他中間件?

此外,是否有任何建議的方式讓中間件通知其他中間件,其結果應該是最終響應? (例如,文件服務中間件擊中了一個文件,因此沒有意義調用視圖中間件)。由於我的觀點是上下文記錄,其餘的中間件(或服務器)應該如何判斷它是最終響應?

回答

3

由於沒有EWGI兼容的Web服務器還沒有,我只能請你的意見

沒有必要EWGI兼容的Web服務器存在,因爲它是EWGI的統一訪問角色和來自不同的web服務器。這是EWGI的核心思想。另一方面,如果您的意思是「符合EWGI的Web框架」,實際上有兩個(或更多?)Web框架支持EWGI。這些是Erlang Web和BeepBeep。

,或者它應該遞歸調用中間件的其餘部分自身?

中間件應該以遞歸方式互相調用,因此中間件的作用是決定下一步該做什麼。

此外,有沒有任何建議的方式對中間件通知中間件的其餘部分,其結果是所謂的最終響應

要回答你的最後一個問題,我認爲這是因爲中間件相互調用其他遞歸最簡單的方法是,如果答案是最終的,則不會調用其他中間件,並將#ewgi_context {}記錄返回到ewgi層。

+0

感謝您的回答。通過EWGI兼容的Web服務器我的意思是一個Web服務器,它將中間件列表作爲其輸入。看看你的例子,Erlang Web是這樣做的(請參閱e_mod_ewgi:do/1在eptic中),BeepBeep以另一種方式做它(請參閱beepbeep:run/2)。 另外看ewgi_application:運行/ 1在ewgi來源(http://github.com/skarab/ewgi/tree/master),它似乎贊成迭代(非遞歸方法)。 – Zed 2009-08-13 18:18:23

1

根據具體情況,中間件可以使用迭代或遞歸方法。

迭代方法的一個例子是:

http://groups.google.com/group/ewgi/browse_thread/thread/f9042018cb27baa3

其他簡單的例子是在ewgi_examples

總的來說,我比較喜歡迭代的方法,但是如果你有依賴於其他中間件遞歸方法可能更好。

此外,有沒有對中間件提出的任何方式來通知中間件,其結果是所謂的最終響應的休息嗎? (例如,文件服務中間件擊中了一個文件,因此沒有意義調用視圖中間件)。由於我的觀點是上下文記錄,其餘的中間件(或服務器)應該如何判斷它是最終響應?

沒有提出的方法。如果你使用遞歸方法,瘋狂回答你只需要返回ewgi_context。在迭代方法中,視圖或視圖調用者可以檢查是否在ewgi_context中設置了響應正文和標題,並決定相應做什麼。

一般來說,我認爲ewgi是網絡的unix管道。每個中間件都會得到一個請求和響應(類似於管道中的標準輸入和標準輸出),它會修改上下文(如果需要)並返回它。

希望這會有所幫助。