5

HaskellでWebアプリケーションを作成したい(たとえば、ブログ、フォーラム、またはいくつかの動的Webページなど)。何が必要ですか?

(私はhttpサーバー(apacheやlighttpdなど)が必要であることを知っています。また、Haskellプログラミングについて知っておく必要があることも知っています。)

すべてを連携させるにはどうすればよいですか?パッケージ/セットアップ全体がわかりません。

mod_haskellまたは他のモジュールが必要ですか?

誰かがapacheモジュールがどのように機能し、それらをインストールする方法を私に説明できますか?

4

3 に答える 3

6

選択したプログラミング言語で動的なWebサイトを作成していると想像してみてください。

ユーザーがサイトにアクセスすると、http://name-of-your-site.comにリクエストが送信され、これがサーバーに渡されます。

リクエストがポート80に到着すると、HTTPサーバー(おそらくApache)によって収集されますが、LightHttpdまたはその他のHTTPサーバーである可能性があります。それはリクエストを受け取り、それをどうするかを決定します。

サイトがPythonで記述されていると想像すると、サイトは.pyファイルの束としてどこかに保存されるため、実行するファイルとその出力を返す場所の指示とともに、リクエストをPythonランタイムに渡す必要があります。ファイル。これがmod_pythonの役割です。サーバーからリクエストを受け取り、ランタイムに渡します。ほとんどのmodはスレッドプールも処理します-1分間に20のリクエストがあり、それぞれが単純な方法でpythonランタイムに渡されると、20のpythonスレッドがすべて起動し、一緒に実行され、プロセスが完了すると終了します。 。通常、Apache modsはいくつかのスレッドを稼働させ続け、起動時間を節約し、既存のスレッドの1つに新しいリクエストを渡すだけで、1つのリクエストが完了すると、インターフェイスから別のリクエストが渡されます。CGIコンテナは少し異なる方法で同じ仕事をします。どちらかを選択する理由は、使用しているHTTPサーバーに関連している可能性があります(mod_pythonはApache用に設計されています。たとえば、FastCGIのようなものがより多く使用されますLightHttpd)およびパフォーマンスの考慮事項。FastCGIのようなものを使用している場合は、CGIコンテナとプログラミング言語ランタイムの間にインターフェイスの第2層が必要になる可能性があります。

したがって、作業しているレイヤーは次のようになります。

HTTP Server->  CGI Layer          ->  Programming Language Runtime -> your code
Apache     ->  mod_python         ->  Python Runtime               -> index.py
LightHttpd ->  FastCGI+python_cgi ->  Python Runtime               -> index.py 

明らかに、ここでは例としてPythonを使用しましたが、ほとんどの主流言語(および多くの難解な言語)に相当するmodとcgiコンテナーを見つけることができ、使用しているHttpスタックはほとんどの場合ほぼ同じです。

于 2009-12-29T16:21:06.697 に答える
6

タイトルの質問に対する短い回答:はい。

http://hackage.haskell.org/package/cgiを参照してください

Network.cgi

CGIプログラムを作成するためのシンプルなライブラリ。 CGI仕様については、http://hoohoo.ncsa.uiuc.edu/cgi/interface.htmlを参照 してください。

これは、エラー処理を含む簡単な例です(Hello Worldで問題が発生する可能性のあるものがたくさんあるわけではありません)

 import Network.CGI

 cgiMain :: CGI CGIResult
 cgiMain = output "Hello World!"

 main :: IO ()
 main = runCGI (handleErrors cgiMain)

部品の統合について。

CGIは、Webサーバーと一部の外部プログラム間のプログラミングプロトコルおよびインターフェイスであり、標準の入出力を介して通信し、環境変数を共有します。

CGIをサポートするWebサーバーが必要です(ほとんどの場合)。サーバーを構成して、特別な要求(たとえば、特別なファイル拡張子を持つURL)に対してCGIプログラムを呼び出すようにする必要があります。Apache Webサーバーについては、http://httpd.apache.org/docs/2.0/howto/cgi.htmlを参照してください。

于 2009-12-29T16:07:56.243 に答える
1

おそらく、 HAppSが役立つかもしれません。

于 2009-12-29T16:05:24.170 に答える