Table des matières
Comment mettre en œuvre la communication
Sous une seule machine (un seul thread dans le client, plusieurs threads dans un seul processus, plusieurs processus dans un seul serveur), la communication via le partage de mémoire est la méthode la plus courante.
Parce que la mémoire ne peut pas être lue les unes des autres après le démarrage des processus (restrictions au niveau du système), le partage de mémoire entre les processus est en fait obtenu en ouvrant une nouvelle section de mémoire partagée. Cependant, le nœud ne prend actuellement pas en charge la mémoire partagée et ne peut être implémenté que via des langages de bas niveau, tels que le plug-in complémentaire de perturbateur de mémoire partagée implémenté en C++ (décrit dans un autre article).
Socket est divisé en deux implémentations :
net
四、Signal(信号)
五、Message queue(消息队列)
Maison interface Web js tutoriel Explication détaillée de plusieurs méthodes de mise en œuvre de la communication de processus dans le nœud

Explication détaillée de plusieurs méthodes de mise en œuvre de la communication de processus dans le nœud

Dec 14, 2021 pm 07:04 PM
node 进程通信

nodeComment communiquer entre processus ? L'article suivant vous aidera à comprendre les méthodes de communication des processus de nœud et comment implémenter ces méthodes de communication dans node. J'espère qu'il vous sera utile !

Explication détaillée de plusieurs méthodes de mise en œuvre de la communication de processus dans le nœud

La communication couvre en fait tous les niveaux de développement. Les plus courants incluent la communication client et serveur via divers protocoles de communication, la communication RPC, la communication mutuelle entre les différents modules pendant le processus de développement et entre le processus électronique principal et le processus de rendu. entre les nœuds, etc.

Cet article tente principalement de résumer les méthodes de communication nodejs (monothread, multi-thread, multi-processus), les scénarios d'utilisation, la mise en œuvre, etc.

Comment mettre en œuvre la communication

La communication du processus général est mise en œuvre comme suit :

1. Mémoire partagée (partage de mémoire)

2. canal nommé FIFO);

4. Signal (signal);

5. File d'attente des messages (file d'attente des messages)

Voyons comment implémenter ces méthodes de communication dans le nœud

1. Mémoire partagée (partage de mémoire); )

Sous une seule machine (un seul thread dans le client, plusieurs threads dans un seul processus, plusieurs processus dans un seul serveur), la communication via le partage de mémoire est la méthode la plus courante.

Mémoire partagée (partage de mémoire) - thread unique

Du niveau du système d'exploitation, toute la mémoire des threads dans le processus est partagée, mais la condition préalable est que l'adresse d'accès à la mémoire doit être connue.

Mais au niveau du langage (niveau d'implémentation nœud ou v8), nous ne touchons pas directement à la gestion de la mémoire, mais effectuons indirectement des opérations mémoire à partir de la syntaxe/api fournie par la v8. La v8 nous offre trois façons de partager la mémoire (on l'appelle peut-être plus correctement variables partagées) :

variables globales

, variables locales, paramètres partagés (appel par partage) ;v8 transférera d'abord le code avant de l'exécuter. Après avoir été converti en arbre de syntaxe abstraite via la spécification Estree, il est ensuite interprété, compilé et exécuté. Il y a une portée dans l'arbre de syntaxe abstraite (voir mon autre article sur l'arbre de syntaxe abstraite), et la lecture de la mémoire se fait via des identifiants. (nom de la variable) Recherche niveau par niveau. Ainsi, si vous avez besoin de partager de la mémoire entre deux méthodes, vous pouvez la créer dans leur portée commune.

Mémoire partagée (partage de mémoire) - multi-threading

Dans l'environnement client ou dans l'environnement nœud, nous pouvons implémenter le multi-threading, et les deux méthodes sont similaires (le nœud est implémenté via worker_threads, et le le navigateur est implémenté via Worker). Le partage de mémoire ici est principalement réalisé à l'aide de l'API d'opération de mémoire (SharedArrayBuffer). Regardons d'abord un exemple d'implémentation de navigateur :

// 主线程
const buffer = new SharedArrayBuffer(1024)
const typedArr = new Int16Array(buffer)
const newWorker = new Worker('./worker.js')

typedArr[0] = 20

newWorker.postMessage(buffer)
newWorker.onmessage= (data) => {
    console.group('[the main thread]');
    console.log('Data received from the main thread: %i', typedArr[0]);
    console.groupEnd();
}
// 子线程
addEventListener('message', ({ data }) => {
  const arr = new Int16Array(data)

  console.group('[the worker thread]')
  console.log('Data received from the main thread: %i', arr[0])
  console.groupEnd()
  arr[0] = 18
  
  postMessage('Updated')
})
// 结果
[the worker thread]
  Data received from the main thread: 20
[the main thread]
  Data received from the main thread: 18
Copier après la connexion

Mémoire partagée (partage de mémoire) - multi-processus

Parce que la mémoire ne peut pas être lue les unes des autres après le démarrage des processus (restrictions au niveau du système), le partage de mémoire entre les processus est en fait obtenu en ouvrant une nouvelle section de mémoire partagée. Cependant, le nœud ne prend actuellement pas en charge la mémoire partagée et ne peut être implémenté que via des langages de bas niveau, tels que le plug-in complémentaire de perturbateur de mémoire partagée implémenté en C++ (décrit dans un autre article).

2. Socket (Socket)

Socket est divisé en deux implémentations :

1. TCP Socket 

2. UNIX Domain Socket ; Concept : TCP Socket est la couche d'abstraction intermédiaire pour la communication entre la couche application et la famille de protocoles TCP/IP. Il s'agit d'un mécanisme de communication inter-processus fourni par le système d'exploitation

La communication TCP Socket devrait être la communication la plus courante dans notre système d'exploitation. développement quotidien (architecture C/S) L'une des méthodes les plus courantes dans notre développement quotidien est l'utilisation de divers protocoles de couche d'application (http, websocket, rpc, ftp, etc.). Le module http dans node est également implémenté sur la base. sur le module réseau.

Remarque : En fait, UDP appartient également à la couche TCP (ne faisant pas strictement référence à la communication TCP, mais la couche TCP/IP dans la couche de communication réseau fournit le module « dgram » pour l'implémenter, mais il n'y en a pas). contact dans les applications réelles Réussi, donc pas de compréhension supplémentaire.

net

Dans le nœud, TCP Socket est implémenté par le module net. Le module net fournit principalement les fonctions suivantes :

1. Prise en charge IPC de couche supérieure (en fait, la mise en œuvre de la communication pipeline, plus de détails sur la communication pipeline. plus tard) Description);

2, classe net.Server;

TCP Socket适用于单机,C/S架构等.但UNIX Domain Socket只适用于单机。  
UNIX Domain Socket不需要经过一系列的网络中转(协议,分包,校验等等),性能更高,稳定性更好。
Copier après la connexion
3, classe net.Socket;
// 服务端通过net.createServer创建服务,会返回net.Server对象,可以通过返回值进行各种事件监听,端口监听
const net = require('net')

net.createServer((server => {
  server.end(`hello world!\n`)
})).listen(3302, () => {
  console.log(`running ...`)
})
Copier après la connexion

UNIX Domain Socket

UNIX Domain Socket crée un descripteur de fichier et la communication entre les différents processus passe en lecture et écrivez ce descripteur de fichier pour la communication (peut être divisé en processus de création et autres processus, et la communication mutuelle entre d'autres processus peut se faire via le processus de création comme transit). par exemple

const net = require('net')
const socket = net.createConnection({port: 3302})

socket.on('data', data => {
  console.log(data.toString())
})
Copier après la connexion

3. Pipeline

La communication par pipeline est divisée en deux types, les canaux non nommés et les canaux nommés.

Les canaux sans nom sont implémentés de la même manière que les sockets de domaine UNIX, communiquant en créant des descripteurs de fichiers. Les canaux nommés communiquent via des descripteurs de fichiers fixes :
"\\\\.\\pipe\\" + PIPE_NAME;
Copier après la connexion

源码可参考stackoverflow(https://stackoverflow.com/questions/11750041/how-to-create-a-named-pipe-in-node-js)
目前理解的管道通信和UNIX Domain Socket实现基本一致,只是管道通信规范了读写权限,半双工通信,UNIX Domain Socket更加自由一些。

四、Signal(信号)

Signal是操作系统在终止进程前给进程发送的信号。在node中可以通过process.kill(pid, signal)/child_process.kill(pid, signal)接口实现,e.g.

// 要被终止的http守护进程
const Koa = require('koa')
const app = new Koa()

app.listen(3004, () => {
  console.log(`process pid is : ${process.pid}`) // process pid is : 75208
})
// 操作进程
process.kill(75208, 'SIGHUP') // 'SIGHUP'是一般结束进程的信号,还有更多其他的信号参考 [标识](https://blog.csdn.net/houjixin/article/details/71430489)
Copier après la connexion

但这里的前提是你需要获取到被终止的进程pid,更多pid的内容可阅读我之前关于进程的文章。

五、Message queue(消息队列)

一开始我以为是redis,各种MQ之类的基于TCP的消息队列。但其实是操作系统内的消息队列,node暂时没有提供相关的上层接口,需要更底层实现,e.g. svmq

更多node相关知识,请访问:nodejs 教程!!

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer un nœud dans NVM Comment supprimer un nœud dans NVM Dec 29, 2022 am 10:07 AM

Comment supprimer un nœud avec nvm : 1. Téléchargez « nvm-setup.zip » et installez-le sur le lecteur C ; 2. Configurez les variables d'environnement et vérifiez le numéro de version via la commande « nvm -v » 3. Utilisez la commande « nvm » ; install" commande Installer le nœud ; 4. Supprimez le nœud installé via la commande "nvm uninstall".

Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Comment utiliser Express pour gérer le téléchargement de fichiers dans un projet de nœud Mar 28, 2023 pm 07:28 PM

Comment gérer le téléchargement de fichiers ? L'article suivant vous expliquera comment utiliser Express pour gérer les téléchargements de fichiers dans le projet de nœud. J'espère qu'il vous sera utile !

Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Une analyse approfondie de l'outil de gestion de processus de Node « pm2 » Apr 03, 2023 pm 06:02 PM

Cet article partagera avec vous l'outil de gestion de processus de Node "pm2" et expliquera pourquoi pm2 est nécessaire, comment installer et utiliser pm2, j'espère qu'il sera utile à tout le monde !

Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Enseignement du nœud PI: Qu'est-ce qu'un nœud PI? Comment installer et configurer le nœud PI? Mar 05, 2025 pm 05:57 PM

Explication détaillée et guide d'installation pour les nœuds de pignon Cet article introduira l'écosystème de pignon en détail - nœuds PI, un rôle clé dans l'écosystème de pignon et fournir des étapes complètes pour l'installation et la configuration. Après le lancement du réseau de test de la blockchain pèse, les nœuds PI sont devenus une partie importante de nombreux pionniers participant activement aux tests, se préparant à la prochaine version du réseau principal. Si vous ne connaissez pas encore Pinetwork, veuillez vous référer à ce qu'est Picoin? Quel est le prix de l'inscription? PI Utilisation, exploitation minière et sécurité. Qu'est-ce que Pinetwork? Le projet Pinetwork a commencé en 2019 et possède sa pièce exclusive de crypto-monnaie PI. Le projet vise à en créer un que tout le monde peut participer

Parlons de la façon d'utiliser pkg pour empaqueter des projets Node.js dans des fichiers exécutables. Parlons de la façon d'utiliser pkg pour empaqueter des projets Node.js dans des fichiers exécutables. Dec 02, 2022 pm 09:06 PM

Comment empaqueter le fichier exécutable nodejs avec pkg ? L'article suivant vous expliquera comment utiliser pkg pour empaqueter un projet Node dans un fichier exécutable. J'espère qu'il vous sera utile !

Que faire si le nœud npm gyp échoue Que faire si le nœud npm gyp échoue Dec 29, 2022 pm 02:42 PM

npm node gyp a échoué car les versions de « node-gyp.js » et « Node.js » ne correspondaient pas. La solution : 1. Videz le cache du nœud via « npm cache clean -f » 2. Via « npm install - ». g n" Installez le module n ; 3. Installez la version "node v12.21.0" via la commande "n v12.21.0".

Authentification basée sur des jetons avec Angular et Node Authentification basée sur des jetons avec Angular et Node Sep 01, 2023 pm 02:01 PM

L'authentification est l'une des parties les plus importantes de toute application Web. Ce didacticiel traite des systèmes d'authentification basés sur des jetons et de leurs différences par rapport aux systèmes de connexion traditionnels. À la fin de ce didacticiel, vous verrez une démo entièrement fonctionnelle écrite en Angular et Node.js. Systèmes d'authentification traditionnels Avant de passer aux systèmes d'authentification basés sur des jetons, examinons les systèmes d'authentification traditionnels. L'utilisateur fournit son nom d'utilisateur et son mot de passe dans le formulaire de connexion et clique sur Connexion. Après avoir effectué la demande, authentifiez l'utilisateur sur le backend en interrogeant la base de données. Si la demande est valide, une session est créée à l'aide des informations utilisateur obtenues à partir de la base de données et les informations de session sont renvoyées dans l'en-tête de réponse afin que l'ID de session soit stocké dans le navigateur. Donne accès aux applications soumises à

Qu'est-ce qu'un système d'authentification unique ? Comment l'implémenter en utilisant nodejs ? Qu'est-ce qu'un système d'authentification unique ? Comment l'implémenter en utilisant nodejs ? Feb 24, 2023 pm 07:33 PM

Qu'est-ce qu'un système d'authentification unique ? Comment l'implémenter en utilisant nodejs ? L'article suivant vous présentera comment utiliser Node pour implémenter un système d'authentification unique. J'espère qu'il vous sera utile !

See all articles