2009-08-13 8 views
1

EWGIの互換性のためにどのようにミドルウェアを設計するべきかを理解しようとしています。まだEWGIに準拠していないWebサーバーは存在しないため、私はあなたの意見を求めることしかできません。EWGIとの互換性のための設計

私が仕様を理解していれば、ミドルウェアは#ewgi_context {}レコードを入力として受け取り、同じタイプの別のレコードを返します。

質問:ミドルウェアはdjangoの2回呼び出されますか、それともそれ以外のミドルウェアを再帰的に呼び出すことになっていますか?

また、ミドルウェアが他のミドルウェアにその結果が最終応答と思われることを通知する方法はありますか? (例えば、ファイル提供ミドルウェアがファイルをヒットしたので、ビューミドルウェアを呼び出すポイントがない)。私の見解が文脈記録であるため、ミドルウェア(またはサーバ)の残りの部分が最終的な応答であることをどのように把握する必要がありますか?

答えて

3

それはへのアクセスを統一するEWGIの役割だから何EWGI準拠のWebサーバーがまだ存在しないことを考えると、私はあなたの意見のために

を頼むことができる存在する必要EWGI準拠のWebサーバーはありませんし、別のWebサーバーから。それがEWGIのコアアイデアです。

一方、「EWGIに準拠したWebフレームワーク」を意味するのであれば、実際にはEWGIをサポートするWebフレームワークは2つ(またはそれ以上)です。これらはErlang WebとBeepBeepです。

またはそれ以外のミドルウェアを再帰的に呼び出す予定ですか?

ミドルウェアは、再帰的にお互いを呼び出すことになっているので、次に何をするかを決めるミドルウェアの役割です。

また、その結果は、あなたの最後の質問に答えるために、おそらく最終的な応答

であるとミドルウェアの残りの部分を通知するミドルウェアのための任意の提案方法はあり、私はミドルウェアがそれぞれ呼び出すためだと思います再帰的にこれを達成する最も単純な方法は、答えが最終的な場合は他のミドルウェアを呼び出さず、#ewgi_context {}レコードをewgi層に返します。

+0

あなたの答えをありがとう。 EWGI準拠のWebサーバーでは、ミドルウェアのリストを入力として受け取るWebサーバーを意味しました。 あなたの例を見ると、Erlang Webはそれを1通り(epticのe_mod_ewgi:do/1を参照)しますが、BeepBeepはそれ以外の方法です(beepbeep:run/2を参照)。 また、ewgiソース(http://github.com/skarab/ewgi/tree/master)でewgi_application:run/1を見ると、反復的(非再帰的な方法)の方が望ましいようです。 – Zed

1

ミドルウェアは、状況に応じて反復的アプローチまたは再帰的アプローチの両方を使用できます。

反復アプローチの例は次のとおりです。

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

他の簡単な例は、一般的にはewgi_examples

である私は、反復的なアプローチを好むが、あなた、あなたは他人に依存ミドルウェアを持っている場合再帰的アプローチはおそらくより良いでしょう。

また、ミドルウェアがミドルウェアの残りの部分にその結果がおそらく最終応答であることを通知する方法はありますか? (例えば、ファイル提供ミドルウェアがファイルをヒットしたので、ビューミドルウェアを呼び出すポイントがない)。私の見解が文脈記録であるため、ミドルウェア(またはサーバ)の残りの部分が最終的な応答であることをどのように把握する必要がありますか?

提案方法はありません。あなたが狂ったように再帰的なアプローチを使用する場合は、ewgi_contextを返す必要があるだけです。反復的なアプローチでは、ビューまたはビュー呼び出し側は、ewgi_contextに応答本文とヘッダーが設定されているかどうかを確認し、それに応じて何をすべきかを判断できます。

一般的に私はewgiをウェブ用のUNIXパイプと考えています。各ミドルウェアは要求と応答(パイプのstdinとstdoutに似ています)を取得して、必要に応じてコンテキストを変更して返します。

これが役に立ちます。

関連する問題