2013-04-18 8 views
12

Androidアプリケーションからのリクエストを処理するために小さなサーバーをプログラミングする必要があります。 (ユーザーがサーバーに数値を送信すると、サーバーは各ユーザーから受け取った数値を計算します(平均は言いましょう)。サーバサイドのJavaプログラミングのためにサーブレットが必要ですか?

この簡単な紹介は、Oracle(http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html)から読んだところです。

特定のドアでリスンするサーバーを離れる方法について説明します。通常のJava、特別なアプリケーションは必要ありません(Tomcatなど)。

私は人がこの種のことを達成するために一般に「サーブレット」(Tomcatを使用)を使用していることを知っています。何故ですか?利点は何ですか?単純なチュートリアルで説明したようなサンプルサーバーをプログラミングして、それを常にコンピュータ上で実行しておくことはできませんか?

私は全体のシナリオをよりよく理解したいと思っています。 =)

+1

サーブレットは 'Tomcat'で動作します。 'Tomcat'はHTTPサーバーです。生のソケットはそれだけです。 –

+2

@DarkCthulhu生のソケットサーバーにマルチスレッドを追加するのは簡単です。 HTTPプロトコルを(正しく)実装するのは自明ではありません。 –

+0

合意。いずれにしても、ホイールを改革するポイントはありません。 –

答えて

14

ソケットを使用することは非常に簡単です。最初は。

あなたはサーバークラスを作成し、それをポートにバインドして持ち帰ります。

ヒットする最初のハードルは、コメントに記載されているマルチスレッドです。しかし、シンプルなプロデューサー/消費者のパターンは、すぐにそれを解決します。

次の問題は、プロトコルです。

  • 誰が最初に話しますか?

  • どのように対応しますか?

  • どのように無効なリクエストを処理しますか?

  • リクエスト中にストリームが崩壊するとどうなりますか?

  • リクエストごとに新しいソケットを開くのか、クライアントがソケットを保持して複数のリクエストを書き込むのですか?

  • 多分、あなたはある種のノンブロッキングIOを望んでいますか?

これは、HTTPが入ってくる場所で、TCP/IP経由で通信するためのプロトコルです(実際には、紙とバイクのビットを使用できます)。それは上記のすべての質問(およびもっと多くのもの)に対する答えを定義します。

ウェブサーバー(tomcat、glassfish)を実行し、生のソケットを処理し、適切な情報を送信します。

サーブレットは、Tomcatに接続があり、それが圧縮、暗号化などをネゴシエートしたときに抽象化され、サーブレットに要求を渡します。

サーブレットは未処理のソケットについて心配する必要はなく、要求を読み込んで応答を書き込みます。

HTTPが唯一のプロトコルではないことを指摘する価値はありますが、Webブラウジングに使用されるのは単なるものです。そして、Webサーバーで使用されるように。

+0

紙とバイクのビットを超えるHTTPの場合+1。それが起こっているのを見て興味深いでしょう。また、あなたがそのような許可を与えた場合、将来私はそれを引用します。 – afsantos

10

サーブレットは必要ありません。

サーブレットはソケット処理を管理するので便利ですが、サーブレットを実行するにはコンテナ(Tomcatなど)が必要です。あなたが話しているような仕事をするために実際に作られたNettyを見たいかもしれません。

+0

+1ネティ推奨。とても賢い。 – duffymo

+0

ソケットで直接処理するときにファイアウォールの問題が発生する可能性があります。 –

+0

Nettyにポート80または443への要求を処理するように頼むことができます。ファイアウォールの問題はありません。 – duffymo

4

サーブレットは、JavaでHTTPプロトコルを処理する標準的な方法です。

あなたは、クライアント - サーバ通信あなたは、サーバー側でJavaを使用するためにHTTPを使用したい場合は

あなたはサーブレットを使用する必要があります

サーブレットは、インターネットでJavaと通信するためのシンプルで効果的なソリューションです。必要に応じてrancidfishbreathの提案するNettyは有効な代替手段ですが、Tomcatでサーブレットを使用することをお勧めします。 Tomcatを使用することは問題ではなく、軽くて自由です。

すでにbmorris591で説明されている理由により、rawソケットを使用するという考えを破棄してください。

+0

あなたが望むなら、NettyはHTTPを扱うことができます。これは、プロトコルとノンブロッキングIOについてはそれほど重要ではありません。 – duffymo

+0

あなたは正しいです、私は私の答えを完成させました。 – Pino

0

サーバー側のソリューションとして、Java以外のものを見たいと思うかもしれません。おそらくNode.jsPHP、またはおそらくRuby on Railsでさえ、より良い、鐘と笛のオプションかもしれません。おそらく100以上のオプション(Python、Djangoなど、etc ...など)を列挙することができます。これは、JavaとServletを学ぶよりも簡単で、それに伴ってすべてのことを学ぶよりも簡単です。 JavaアプリケーションとJavaアプリケーションとの対話は必ずしも必要ではありません。また、巨大な学習曲線を必要としないカスタムソリューションを実行する単純なHTTPサーバーを取得するためのオプションが多数あります。

+0

私はRuby on RailsとDjangoがより複雑になり、フル機能のウェブサイトに特に適していると考えました。そうじゃないの? –

+0

Ruby on Railsがかなり簡単に見つかりました。それは、私が覚えていることから(3年以上前)、PHPのようなもので、たくさんの自動コード生成がありました。しかし、要点は、あなたが本当にJavaを必要としないということです。見つけやすいものを使ってください。また、Javaに固執したい場合は、Spring Rooのように、すべてのボイラー・プレート・コードを生成し、かなりまともな作業を開始できるツールもあります。 – CodeChimp

+0

質問は具体的です: 'サーバー側のJavaプログラミングのため'。 – Viccari

関連する問題