Unix-sockets-client-server-model

提供:Dev Guides
移動先:案内検索

Unixソケット-クライアントサーバーモデル

ほとんどのネットアプリケーションはクライアントサーバーアーキテクチャを使用します。これは、相互に通信して情報を交換する2つのプロセスまたは2つのアプリケーションを指します。 2つのプロセスの1つはクライアントプロセスとして機能し、別のプロセスはサーバーとして機能します。

クライアントプロセス

これはプロセスであり、通常は情報を要求します。 応答を取得した後、このプロセスは終了するか、他の処理を行う場合があります。

、インターネットブラウザーはクライアントアプリケーションとして動作し、Webサーバーに要求を送信して1つのHTML Webページを取得します。

サーバープロセス

これは、クライアントからリクエストを受け取るプロセスです。 クライアントから要求を取得した後、このプロセスは必要な処理を実行し、要求された情報を収集して、リクエスタークライアントに送信します。 完了すると、別のクライアントにサービスを提供する準備が整います。 サーバープロセスは常に警告を発し、着信要求を処理する準備ができています。

-Webサーバーは、インターネットブラウザーからの要求を待機し続け、ブラウザーから要求を受け取るとすぐに、要求されたHTMLページを取得し、そのブラウザーに送り返します。

クライアントはサーバーのアドレスを知る必要がありますが、サーバーは接続が確立される前にアドレスやクライアントの存在を知る必要がないことに注意してください。 接続が確立されると、両側で情報を送受信できます。

2層および3層のアーキテクチャ

クライアントサーバーアーキテクチャには2種類あります-

  • * 2層アーキテクチャ*-このアーキテクチャでは、クライアントはサーバーと直接対話します。 このタイプのアーキテクチャには、いくつかのセキュリティホールとパフォーマンスの問題があります。 Internet ExplorerとWebサーバーは2層アーキテクチャで動作します。 ここで、セキュリティ問題はSecure Socket Layer(SSL)を使用して解決されます。
  • * 3層アーキテクチャ*-このアーキテクチャでは、もう1つのソフトウェアがクライアントとサーバーの間に配置されます。 このミドルソフトウェアは「ミドルウェア」と呼ばれます。 ミドルウェアは、負荷が大きい場合にすべてのセキュリティチェックと負荷分散を実行するために使用されます。 ミドルウェアはクライアントからのすべてのリクエストを受け取り、必要な認証を実行した後、そのリクエストをサーバーに渡します。 その後、サーバーは必要な処理を行い、応答をミドルウェアに送り返し、最後にミドルウェアはこの応答をクライアントに返します。 3層アーキテクチャを実装する場合、WebサーバーとWebブラウザの間にWeb LogicやWebSphereソフトウェアなどのミドルウェアを保持できます。

サーバーの種類

あなたが持つことができるサーバーの2種類があります-

  • 反復サーバー-これは、サーバープロセスが1つのクライアントにサービスを提供し、最初の要求を完了した後、別のクライアントから要求を受け取る最も単純な形式のサーバーです。 その間、別のクライアントが待機し続けます。
  • 同時サーバー-このタイプのサーバーは複数の同時プロセスを実行して、一度に多くの要求を処理します。これは、1つのプロセスに時間がかかり、別のクライアントがそれほど長く待機できないためです。 Unixで並行サーバーを記述する最も簡単な方法は、各クライアントを個別に処理する子プロセスを_fork_することです。

クライアントの作り方

接続を確立するためのシステムコールは、クライアントとサーバーで多少異なりますが、両方ともソケットの基本的な構成を伴います。 両方のプロセスが独自のソケットを確立します。

クライアント側でソケットを確立する際の手順は次のとおりです-

  • * socket()*システムコールでソケットを作成します。
  • * connect()*システムコールを使用して、ソケットをサーバーのアドレスに接続します。
  • データを送受信します。 これを行うにはいくつかの方法がありますが、最も簡単な方法は* read()および write()*システムコールを使用することです。

サーバーの作り方

サーバー側でソケットを確立する際の手順は次のとおりです-

  • * socket()*システムコールでソケットを作成します。
  • * bind()*システムコールを使用して、ソケットをアドレスにバインドします。 インターネット上のサーバーソケットの場合、アドレスはホストマシンのポート番号で構成されます。
  • * listen()*システムコールとの接続をリッスンします。
  • * accept()*システムコールで接続を受け入れます。 通常、この呼び出しは、クライアントがサーバーに接続するまで接続をブロックします。
  • * read()および write()*システムコールを使用してデータを送受信します。

クライアントとサーバーの相互作用

以下は、クライアントとサーバーの完全な相互作用を示す図です-

ソケットクライアントサーバー