Implémentation d’un serveur de sockets ou d’un serveur de fichiers utilisant plusieurs threads: le concept n’est pas clair

S’il vous plaît, aidez-moi à clarifier ce concept. Supposons que nous ayons un serveur de port de socket implémenté à l’aide de threads. Le serveur de socket écoute sur un port de socket et, lorsqu’un message arrive, crée un thread pour traiter la demande.

Le code client envoie un nombre donné de messages au serveur. Ce code client peut également être exécuté à partir de machines différentes par plusieurs utilisateurs. Je comprends que les codes de code client sont exécutés en tant que processus distincts. C’est-à-dire que des processus distincts adressent des demandes au serveur qui sont ensuite traitées par un thread de serveur.

Ainsi, un client traite-t-il une stack, un espace adresse utilisateur, un bloc de contrôle de processus, etc. transmis au thread du serveur qui traite sa demande?

De même, s’il s’agit d’un serveur de fichiers et qu’une demande d’ouverture de fichier est implémentée par un thread de serveur, le fichier fd fait-il partie du tableau des descripteurs de fichiers du serveur ou des processus appelants.

Je serais reconnaissant d’obtenir des liens vers des documents que je pourrais lire. Merci

Non, le client et le serveur sont des processus différents, pouvant même s’exécuter sur des machines différentes.

Les clients demanderont au système d’exploitation (via les bibliothèques) d’envoyer des messages réseau aux serveurs, dont le système d’exploitation les décompactera et les dirigera (via les bibliothèques) vers le processus du serveur.

Maintenant, les “threads de gestion des clients” sont une chose différente, ils sont des sous-composants du processus du serveur et, dans votre configuration, l’un de ces threads (celui qui gère le client de l’autre côté du réseau) recevra les données et fera tout ce qui est nécessaire. nécessaire (avec éventuellement une réponse, si nécessaire).

En situation de serveur de fichiers, le descripteur de fichier fourni par le système d’exploitation ne “quitte” jamais le serveur de fichiers. Les clients du serveur de fichiers créent tout ce dont ils ont besoin pour refléter le contenu de la machine distante. Une telle mise en miroir peut inclure des descripteurs de fichier, mais ce ne sont certainement pas les mêmes descripteurs que ceux qui résident sur le serveur. Les descripteurs de fichier client sont liés au code qui prend l’opération demandée et la transforme en un appel réseau, tandis que les descripteurs de fichier du serveur (vraisemblablement) accèdent directement aux blocs sur le disque.

‘Le serveur de socket écoute sur un port de socket et, lorsqu’un message arrive, créez un thread pour traiter la demande.’ Presque. Dans ce type de conception de serveur, un nouveau thread client-serveur est créé (ou dépoolé) lorsqu’une connexion d’un client est acceptée par le thread à l’écoute du serveur. Ce thread client-serveur reçoit l’instance de socket client-serveur allouée par l’appel accept () du thread d’écoute. Le thread client-serveur lit alors généralement à partir du socket client-serveur pour obtenir des messages, HTTP GET / POST, etc.

‘Le code client envoie un nombre donné de messages au serveur. Ce code client peut également être exécuté à partir de machines différentes par plusieurs utilisateurs. Je comprends que les codes de code client sont exécutés en tant que processus distincts. C’est-à-dire que des processus distincts adressent des demandes au serveur qui sont ensuite traitées par un thread de serveur. ‘ Oui-ish. Il est possible qu’un client sur une boîte ait plusieurs connexions à partir de plusieurs threads, mais vous avez raison à 99,99%.

Ainsi, un client traite-t-il une stack, un espace adresse utilisateur, un bloc de contrôle de processus, etc. transmis au thread du serveur qui traite sa demande? ‘ Non! Ce serait un cauchemar absolu!

De même, s’il s’agit d’un serveur de fichiers et qu’une demande d’ouverture de fichier est implémentée par un thread de serveur, le fichier fd fait-il partie du tableau des descripteurs de fichiers du serveur ou des processus appelants.

Le fichier / tout ce qui est ouvert par le thread client-serveur. Toutes les ressources / descripteurs alloués par le thread client-serveur appartiennent au serveur.

Rgds, Martin