ソケットプログラミング、rmi、サーブレットの違いは何ですか。いつ何を使うの?
Socket APIは、Javaアプリケーションがネットワークと対話し、拡張してリモートクライアントおよびサービスと対話するための低レベル(トランスポートレベル)の抽象化です。Socketおよび関連するAPIは、信頼性の高いバイトストリームと信頼性の低いメッセージングサービス。通常、TCP/IPおよびUDP/IPに使用されますが、他のネットワークプロトコルスタックも(少なくとも理論的には)サポートできます。
RMIは、Javaアプリケーション間でアプリケーションレベルのネットワーキングを実装するためのフレームワークおよびプロトコルファミリです。ネットワークの相互作用を、他に存在するオブジェクトに対して行われるJavaメソッド呼び出しとしてモデル化します。このモデルには、あるアプリケーションがオブジェクトを「公開」して、別のアプリケーションがそれらを参照できるようにするメカニズム(通常はネームサーバー)が必要です。これ(およびRMIポートは通常、デフォルトでブロックされているという事実)は、 RMIベースのアプリケーションをセットアップする際の構成作業は簡単ではありません。
サーブレットは、HTTP通信のサーバー側を実装するために設計された主に APIのコレクションです。つまり、JavaでWebサーバーを構築するためです。それら(またはより正確には、それらが実行されるWebコンテナー)はHTTPプロトコルの詳細を処理するため、プログラマーは(理論的には)「アプリケーション」の懸念に対処するだけで済みます。
実際には、サーブレットの開発者やデプロイヤは、URLをサーブレットからオブジェクトにマッピングする、セキュリティ、認証など、他のことを処理する必要があります。さらに、サーブレットはHTTPインタラクションのサーバー側のみを処理します...クライアント側は異なるAPIによって処理される必要があります。 (サーブレットの上に構築されたWebアプリケーションフレームワークの急増によって証明されるように、サーブレット自体では十分ではないと主張することもできます。)
簡単に言うと:
ソケット-TCP/IPと直接インターフェースするいくつかの単純な呼び出し。非常に単純ですが、独自のバッファ処理を実装し、不完全な応答とタイムアウトを自分で処理する必要があります。認証やセキュリティは提供されていません。
rmi-上記のすべてを処理します。<個人的な意見>は、Java標準</個人的な意見>)を汚染した最も悪いAPIの1つであり、プログラミングが非常に簡単で、基本的なネットワークエラーを処理します。認証とセキュリティの問題。構成と展開が難しい。
サーブレット-素敵なシンプルなAPI、すべてのネットワークの問題が処理され、セキュリティとプラグインを介した認証。展開の問題はなく、構成は簡単です。
ソケットを使用して、既存の標準または独自のカスタムプロトコルに関係なく、特定のTCP/IPプロトコルを実装します。ネットワーク通信のすべての側面を完全に制御できます。
サーブレットは一般的な意味で要求/応答セマンティクスをサポートしますが、予想どおり、HTTP要求/応答セマンティクスをサポートするHTTPサーブレットを使用する可能性がはるかに高くなります。たとえば、Webサーバー、またはRESTfulHTTPベースのエンドポイント。
分散JavaオブジェクトにはRMIを使用します。RMI自体はソケット(上記を参照)を使用して実装され、Javaワイヤープロトコルを実装します。