3


5

Webサーバーの実装

私は自分のウェブサーバーを純粋なJavaで実装したいと思っていました。ウェブサーバーは静的リソース(つまり、 html、js、css、pics、movieなど)

そのようなことを実装する方法に関するチュートリアルや記事をお勧めしますか? 少数のプロセスまたはスレッドプールを使用する必要がありますか、またはNodeJSのようなループイベント指向を検討する必要がありますか?

私が探しているものを正確に実行する無料のウェブサーバーがあることは知っていますが、自分自身のエクササイズとしてそれをやりたいと思っていました。

5 Answer


3


これがあなたが望むものだと思うhttp://java.sun.com/developer/technicalArticles/Networking/Webserver/


3


これを演習として行う場合は、イベント駆動型モデルをお勧めします。

HTTPプロトコル、ファイルアクセス、スレッド化と並行処理、構成ファイル管理、ソケット通信、ロギング、エラー処理、MIMEタイプなど、必要な知識が広範囲にわたるため、このトピックに関するチュートリアルが1つあるとは思いません。 ええ、静的なリソースを共有するだけでも、それはまだ大きな問題です。

読んで、幸運を!


1


HTTPリクエスト形式http://datatracker.ietf.org/doc/rfc2616/をよく理解することをお勧めします。 HTTPをゼロから実装するのは簡単なことではありませんが、確かに良い学習課題です。

単純化のためにJava自体の中では、要求ごとのスレッドサーバーを使用することをお勧めします-http://tutorials.jenkov.com/java-multithreaded-servers/multithreaded-server.html - ファイルを提供するために `java.nio`を使用すること。 同時設定で 「java.nio」は、「java.io」よりも負荷のバランスがよいため望ましいです。 「java.io」の方が高速であることを示唆するベンチマークを見つけることができますが、それは順次シングルスレッドコード用です。


1


ACME Webサーバーが出発点として興味深いと思うかもしれません。 アドホックファイル転送に使用します。 あなたがそれを使い慣れたら、そのボトルネックを発見し、それを修正する方法について熟考できるかどうかを見ることができます:)


0


私はhttp://mina.apache.org/[Apache MINA]に仕事をすることを提案します。 これにより、エンコーダー/デコーダーを指定してHTTプロトコルを適切に処理し、リクエストの到着時などにメソッドを呼び出すことができます。 スレッド管理を内部的に処理します。 それなしでネットワーキングプロジェクトを開始することはありません。