Differenza tra un server e un client [duplicato]

4

A un livello elevato, questa è la mia comprensione della differenza tra un client e un server:

  • un server ascolta su un host e una porta, riceve richieste (ad esempio attraverso una connessione socket), quindi invia una risposta al client che ha avviato la connessione socket.
  • Il client è ciò che invia una richiesta al socket di quel server e attende una risposta.

La definizione è un po 'ampia e vaga. Ecco due situazioni in cui entrambi i client si iscrivono alla definizione di cui sopra, ma si comportano in modo diverso:

1) Nel primo esempio, il programma presuppone che un socket server sia in ascolto sulla porta 2000. Questo client effettua una connessione TCP al socket server, attende la risposta, quindi stampa la risposta allo stdout del processo attualmente in esecuzione e chiude connessione. Di per sé non scrive nulla sul server:

require 'socket'
host, port = ARGV

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

Il socket server parla per accettare le connessioni TCP sulla porta 2000. Una volta stabilita una connessione, invia i dati al client, quindi chiude il socket terminando quindi la connessione con il client:

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

  client.puts(Time.now.ctime) 

  client.close
}

Ok, quindi il programma client nell'esempio precedente si abbona alla definizione originale delineata per il client.

Ma nel prossimo esempio, il client si comporta diversamente. I client stabiliscono una connessione TCP ad un'istanza in esecuzione di un server socket redis. Il client crea una connessione socket TCP su redis-server sulla porta 6379 (la porta redis predefinita), oltre a stabilire il nuovo protocollo di richiesta unificato (specifica del protocollo redis) - consentendo alla connessione di comunicare utilizzando il messaging in formato specifico redis (es. Multi-bulk risposte). Proprio come l'altro client, questo client invia una richiesta al socket del server per una connessione TCP e attende una risposta.

Tuttavia, a differenza dell'altro esempio, questo client scrive i dati sul server. Redis implementa il paradigma di messaggistica di pubblicazione / sottoscrizione. Il client viene pubblicato su un canale che è memorizzato nell'archivio chiavi / valori sulla memoria principale supportata da redis. Quindi questo client si comporta in modo significativamente diverso dall'altro in quanto non aspetta semplicemente un qualche tipo di risposta, scrive sul server e fa sì che il server faccia cose, come spingere i dati ai client sottoscritti.

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

Quindi mi chiedo se qualcuno potrebbe darmi una definizione più completa di client e server.

    
posta JohnMerlino 27.07.2013 - 19:00
fonte

2 risposte

8

Il client e il server sono fondamentalmente due parti di un modello di calcolo distribuito .

In questo modello, un utente utilizza un computer client che invia richieste al server . Quindi il server elabora la richiesta e crea la risposta appropriata che invia al client. In questo modello, è spesso il client che avvia l'interazione e non il server. Il server attende semplicemente che le richieste siano servite.

Nei due esempi che hai fornito sopra,

  1. Il primo esempio indica l'operazione Richiesta-Risposta semplice
  2. Secondo esempio, implica che il client invia la richiesta , esegue alcune transazioni / operazioni e invia la risposta, (riuscita o non riuscita).

Quindi invia la risposta, nel secondo esempio.

In sommario:

  • Un server fornisce le richieste dal client.
  • Il client di solito è initiator.
  • Un singolo server può ospitare più client.
  • Il server è responsabile delle elaborazione / operazioni dei dati mentre il client gestisce la presentazione.

Fammi sapere se è stato utile.

    
risposta data 27.07.2013 - 19:39
fonte
2

Un server è un'unità di calcolo dedicata a fornire servizi a uno o più client o altri server.

Un client richiede servizi da uno o più server o altri client.

Un server può fungere da client che richiede servizi da altri server.

    
risposta data 27.07.2013 - 19:40
fonte

Leggi altre domande sui tag