pendant que je lisais ce que signifie AF_INET
, j’ai appris qu’il existe une autre famille appelée UNIX domain socket
. Voici le lien wiki J'ai lu à ce sujet.
Je ne comprends pas ce que cela signifie:
Les sockets de domaine Unix utilisent le système de fichiers comme espace de nom d'adresse . Ils sont référencés par les processus en tant qu'inodes dans le système de fichiers. Ce permet à deux processus d'ouvrir le même socket afin de communiquer . Cependant, la communication se fait entièrement au sein du système d'exploitation noyau.
Si je veux faire SSH or FTP
, quelle famille dois-je utiliser AF_INET or AF_UNIX
. Je suis en fait un peu confus ici.
Si vous souhaitez communiquer avec un hôte distant, vous aurez probablement besoin d'un socket INET
.
La différence est qu’un socket INET
est lié à un tuple de port d’adresse IP, alors qu’un socket UNIX
est "lié" à un fichier spécial de votre système de fichiers. En règle générale, seuls les processus exécutés sur le même ordinateur peuvent communiquer via ce dernier.
Alors, pourquoi utiliserait-on un socket UNIX
? Exactement pour la raison ci-dessus: la communication entre les processus sur le même hôte, constituant une alternative légère à un socket INET
via un bouclage.
En fait, les sockets INET
se trouvent au sommet d’une pile TCP/IP complète, avec des algorithmes d’encombrement du trafic, des backoffs, etc. Une socket UNIX
ne doit traiter aucun de ces problèmes, car tout est conçu pour être local à la machine, son code est donc beaucoup plus simple et la communication est plus rapide. Certes, vous ne remarquerez probablement la différence que sous une charge importante, par exemple. lors du reverse proxy d'un serveur d'applications (Node.js, Tornado ...) derrière Nginx etc.
AF_UNUX Les sockets permettent une excellente communication inter-processus. Ouvrez une paire de sockets socketpair (..) "et liez-vous à un nom de fichier temporaire. Écrivez dans l'une des paires pour arriver à l'autre. Le noyau route les messages sans surcharge de protocole ni de système de fichiers. Vous pouvez utiliser le blocage d'E/S ou sélectionner (.. .) pour synchroniser les threads et les processus de manière FIFO. J'aime le mode non bloquant avec select et datagramme (vous pouvez obtenir une longueur) mais vous pouvez choisir le vôtre. Assurez-vous de supprimer le fichier temporaire aura zéro octet mais apparaîtra toujours dans le répertoire du système de fichiers) jlp