web-dev-qa-db-ja.com

サーバーとクライアントの違い

高レベルでは、これはクライアントとサーバーの違いについての私の理解です:

  • サーバーはホストとポートをリッスンし、リクエストを(ソケット接続などを介して)受信してから、ソケット接続を開始したクライアントに応答を送信します。
  • クライアントは、そのサーバーソケットに要求を送信し、応答を待機するクライアントです。

定義は少し広くあいまいです。次の2つの状況では、両方のクライアントが上記の定義にサブスクライブしますが、動作が異なります。

1)最初の例では、プログラムはソケットサーバーがポート2000でリッスンしていると想定します。このクライアントはソケットサーバーへのtcp接続を作成し、応答を待ってから、現在実行中のプロセスのstdoutに応答を出力し、接続を閉じます。それ自体はサーバーに何も書き込みません:

require 'socket'
Host, port = ARGV

s = TCPSocket.open(Host, port)
while line = s.gets
  puts "the data is #{line.chop}" 
end
s.close

通信するソケットサーバーは、ポート2000でのtcp接続を受け入れます。接続が確立されると、クライアントにデータを送信し、ソケットを閉じて、クライアントとの接続を終了します。

require 'socket'
server = TCPServer.open(2000)
loop { 
  client = server.accept 

  client.puts(Time.now.ctime) 

  client.close
}

上記の例のクライアントプログラムは、クライアント用に記述された元の定義にサブスクライブします。

ただし、次の例では、クライアントの動作が異なります。クライアントは、redisソケットサーバーの実行中のインスタンスへのtcp接続を確立します。クライアントはTCPポート6379(デフォルトのredisポート)でredis-serverへのソケット接続を作成し、さらに新しい統合リクエストプロトコル(redisプロトコル仕様)を確立します-接続がredisを使用して通信できるようにします固有のフォーマットのメッセージング(例:一括返信)他のクライアントと同様に、このクライアントはtcp接続の要求をサーバーソケットに送信し、応答を待ちます。

ただし、他の例とは異なり、このクライアントはサーバーにデータを書き込みます。 Redisは、パブリッシュ/サブスクライブメッセージングパラダイムを実装しています。クライアントは、redisがサポートするメインメモリのキー/値ストアに格納されているチャネルにパブリッシュします。したがって、このクライアントは、ある種の応答を単に待つのではなく、サーバーに書き込み、サーバーがサブスクライブしたクライアントにデータをプッシュするなどの処理を実行するという点で、他のクライアントとは大きく異なります。

require 'rubygems'
require 'redis'
require 'json'

redis = Redis.new

data = {"user" => ARGV[1]}

loop do
  msg = STDIN.gets
  output = redis.publish ARGV[0], data.merge('msg' => msg.strip).to_json
  puts "What output we get #{output}"
end

だから誰かがクライアントとサーバーのより包括的な定義を私に与えることができるかどうか疑問に思っています。

4
JohnMerlino

クライアントとサーバーは、基本的に分散コンピューティングモデル2つの部分です。

このモデルでは、ユーザーはサーバーにリクエストを送信するクライアントコンピューターを使用します。次にサーバーは要求を処理し、適切な応答を作成してクライアントに送り返します。このモデルでは、多くの場合、サーバーではなくクライアントが対話を開始します。サーバーは、リクエストが処理されるのを待つだけです。

上記の2つの例では、

  1. 最初の例は、の単純なRequest-Response操作を示します。
  2. 2番目の例は、クライアントが要求を送信し、いくつかのトランザクション/操作を実行し、応答が(成功または失敗)を送信することを意味します。

したがって、2番目の例では、応答を送信します。

要約すれば:

  • サーバーはクライアントからのリクエストを処理します。
  • クライアントは通常イニシエーターです。
  • 単一のサーバーが複数のクライアントに対応します。
  • クライアントがプレゼンテーションを処理する間、サーバーはデータ処理/操作を担当します。

それが役に立ったかどうか私に知らせてください。

8
JNL

サーバーは、1つ以上のクライアントまたは他のサーバーにサービスを提供するための専用の計算ユニットです。

クライアントは、1つ以上のサーバーまたは他のクライアントにサービスを要求します。

サーバーは、他のサーバーからのサービスを要求するクライアントとして機能できます。

2
Turnkey