13

Android アプリケーションからのリクエストを処理するために小さなサーバーをプログラムする必要があります。(ユーザーがサーバーに数値を送信すると、サーバーは各ユーザーから受信した数値 (たとえば、平均) に対して計算を行い、それを返します)。

Oracle からのこの簡単な紹介を読みました ( http://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html )。

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

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

4

4 に答える 4

15

ソケットの使用は非常に簡単です。初めに。

サーバークラスを作成し、それをポートにバインドして、すぐに使用できます。

コメントで説明されているように、最初にぶつかるハードルはマルチスレッドです。しかし、単純なプロデューサー/コンシューマー パターンを使えば、すぐに解決できます。

次に遭遇する問題はprotocol です

  • 最初に話すのは誰?

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

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

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

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

  • たぶん、ある種の非ブロッキング IO が必要ですか?

ここで HTTP の出番です。これは、TCP/IP を介して通信するためのプロトコルです (実際には、紙切れと自転車を使用できます)。上記のすべての質問 (およびその他の質問) に対する回答を定義します。

したがって、Web サーバー (Tomcat、GlassFish) を実行すると、生のソケットが処理され、正しい情報が送信されます。

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

サーブレットは raw ソケットを気にする必要はなく、リクエストを読み取ってレスポンスを書き込みます。

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

于 2013-04-18T14:55:23.630 に答える
0

サーバー側のソリューションとして、Java 以外のものを検討することもできます。おそらく、 Node.jsPHP、またはRuby on Railsでさえ、より優れた、追加機能のないオプションである可能性があります。おそらく、Java やサーブレット、およびそれに付随するすべてを学ぼうとするよりもはるかに簡単なオプション (Python、Django など) をさらに 100 個挙げることができます。Java アプリが Java アプリと対話する必要は必ずしもありません。また、膨大な学習曲線を必要としないカスタム ソリューションを実行するシンプルな HTTP サーバーを取得するためのオプションがたくさんあります。

于 2013-04-18T18:42:35.490 に答える