cari
Rumahhujung hadapan webtutorial jsPenjelasan terperinci tentang beberapa kaedah pelaksanaan komunikasi proses dalam nod

nodBagaimana untuk berkomunikasi antara proses? Artikel berikut akan membantu anda memahami kaedah komunikasi proses nod dan cara melaksanakan kaedah komunikasi ini dalam nod saya harap ia akan membantu anda!

Penjelasan terperinci tentang beberapa kaedah pelaksanaan komunikasi proses dalam nod

Komunikasi sebenarnya merangkumi semua peringkat pembangunan yang biasa termasuk klien dan pelayan berkomunikasi melalui pelbagai protokol komunikasi, komunikasi RPC, dan komunikasi antara pelbagai modul semasa proses pembangunan , komunikasi antara proses utama elektron dan proses pemaparan, dsb.;

Artikel ini terutamanya cuba meringkaskan kaedah komunikasi nodej (benang tunggal, berbilang benang, berbilang proses) , menggunakan Senario, pelaksanaan, dsb.

Cara komunikasi dilaksanakan

Komunikasi proses umum dilaksanakan seperti berikut:

1 >2. Soket (soket);

3. Baris gilir mesej (baris gilir mesej);

Mari kita lihat cara melaksanakan kaedah komunikasi ini dalam nod

1 Memori Dikongsi (perkongsian memori)

Pada satu mesin ( Benang tunggal dalam pelanggan, berbilang benang dalam satu proses, berbilang proses dalam pelayan tunggal), komunikasi melalui perkongsian memori adalah cara yang paling biasa.

Memori Dikongsi (perkongsian memori)-benang tunggal

Dari peringkat sistem pengendalian, semua memori utas dalam proses dikongsi, tetapi prasyaratnya ialah memori itu memerlukan untuk diketahui alamat akses.

Tetapi dari peringkat bahasa (peringkat pelaksanaan nod atau v8), kami tidak menyentuh pengurusan memori secara langsung, tetapi secara tidak langsung melaksanakan operasi memori daripada sintaks/api yang disediakan oleh v8. v8 memberi kita tiga cara untuk berkongsi memori (mungkin lebih sesuai dipanggil pembolehubah kongsi): pembolehubah global,

pembolehubah tempatan

,

parameter dikongsi

(panggilan dengan perkongsian) ; Sebelum melaksanakan kod, v8 akan menukar kod tersebut menjadi pokok sintaks abstrak melalui spesifikasi Estree dan kemudian mentafsir, menyusun dan melaksanakannya Dalam pokok sintaks abstrak (untuk pokok sintaks abstrak, sila lihat saya yang lain artikel), Terdapat skop, dan bacaan memori dilakukan dengan melihat kembali melalui pengecam (penamaan pembolehubah) langkah demi langkah. Jadi jika anda perlu berkongsi beberapa memori antara dua kaedah, anda boleh menciptanya dalam skop biasa mereka. Memori Dikongsi (perkongsian memori)-pelbagai benang

Dalam sama ada persekitaran klien atau persekitaran nod, kita boleh melaksanakan multi-threading, dan kedua-dua kaedah tersebut adalah serupa (nod melepasi pelaksanaan worker_threads, penyemak imbas melaksanakannya melalui Worker). Perkongsian memori di sini terutamanya dicapai dengan bantuan API operasi memori (SharedArrayBuffer). Mari kita lihat dahulu contoh pelaksanaan penyemak imbas:

Memori Dikongsi (perkongsian memori)-berbilang proses

Kerana memori tidak boleh membaca satu sama lain selepas proses dimulakan. (Sekatan di peringkat sistem) Perkongsian memori antara proses sebenarnya dicapai dengan membuka bahagian baru memori yang dikongsi. Walau bagaimanapun, nod tidak menyokong memori kongsi buat masa ini dan hanya boleh dilaksanakan melalui bahasa peringkat rendah, contohnya: pemalam addon shared-memory-disruptor yang dilaksanakan dalam c (diterangkan dalam artikel lain).
// 主线程
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

2. Soket (Soket) Soket dilaksanakan dalam dua cara:

1.

2 dua Perbezaannya adalah seperti berikut:

Soket TCP


Konsep: Soket TCP ialah lapisan abstraksi perantaraan untuk komunikasi antara lapisan aplikasi dan TCP/IP keluarga protokol, dan merupakan sistem pengendalian Mekanisme komunikasi antara proses yang disediakan; dalam pembangunan harian kami adalah pelbagai protokol lapisan aplikasi (http, websocket, rpc, ftp, dll.), modul http dalam nod juga dilaksanakan berdasarkan modul bersih.

TCP Socket适用于单机,C/S架构等.但UNIX Domain Socket只适用于单机。  
UNIX Domain Socket不需要经过一系列的网络中转(协议,分包,校验等等),性能更高,稳定性更好。
Nota: Malah, UDP juga tergolong dalam lapisan TCP (tidak merujuk sepenuhnya kepada komunikasi TCP, tetapi lapisan TCP/IP dalam lapisan komunikasi rangkaian menyediakan modul 'dgram' untuk melaksanakannya). tetapi dalam praktiknya saya tidak pernah didedahkan kepadanya dalam aplikasi, jadi saya tidak tahu banyak tentangnya.

bersih

Dalam nod, Soket TCP dilaksanakan oleh modul bersih Modul bersih terutamanya menyediakan fungsi berikut:

1 Sokongan IPC (sebenarnya perlaksanaan komunikasi saluran paip, komunikasi saluran paip akan diterangkan secara terperinci kemudian); 🎜 >

Soket Domain UNIX

Soket Domain UNIX mencipta deskriptor fail dan berkomunikasi antara proses yang berbeza dengan membaca dan menulis deskriptor fail ini (boleh Ia dibahagikan kepada penciptaan proses dan proses lain Komunikasi bersama antara proses lain boleh melalui proses penciptaan sebagai transit). cth.

3. Talian Paip

Komunikasi saluran paip terbahagi kepada dua jenis, paip tidak bernama dan paip bernama.

Paip tidak dinamakan dilaksanakan dengan cara yang sama seperti Soket Domain UNIX, berkomunikasi dengan mencipta deskriptor fail.
// 服务端通过net.createServer创建服务,会返回net.Server对象,可以通过返回值进行各种事件监听,端口监听
const net = require('net')

net.createServer((server => {
  server.end(`hello world!\n`)
})).listen(3302, () => {
  console.log(`running ...`)
})
Paip bernama berkomunikasi melalui deskriptor fail tetap:

"\\\\.\\pipe\\" + PIPE_NAME;

源码可参考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)

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

五、Message queue(消息队列)

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

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

Atas ialah kandungan terperinci Penjelasan terperinci tentang beberapa kaedah pelaksanaan komunikasi proses dalam nod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Artikel ini dikembalikan pada:掘金社区. Jika ada pelanggaran, sila hubungi admin@php.cn Padam
Enjin JavaScript: Membandingkan PelaksanaanEnjin JavaScript: Membandingkan PelaksanaanApr 13, 2025 am 12:05 AM

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Beyond the Browser: JavaScript di dunia nyataBeyond the Browser: JavaScript di dunia nyataApr 12, 2025 am 12:06 AM

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Membina aplikasi SaaS Multi-penyewa dengan Next.js (Integrasi Backend)Apr 11, 2025 am 08:23 AM

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing

Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Cara Membina Aplikasi SaaS Multi-Tenant dengan Next.js (Integrasi Frontend)Apr 11, 2025 am 08:22 AM

Artikel ini menunjukkan integrasi frontend dengan backend yang dijamin oleh permit, membina aplikasi edtech SaaS yang berfungsi menggunakan Next.Js. Frontend mengambil kebenaran pengguna untuk mengawal penglihatan UI dan memastikan permintaan API mematuhi dasar peranan

JavaScript: meneroka serba boleh bahasa webJavaScript: meneroka serba boleh bahasa webApr 11, 2025 am 12:01 AM

JavaScript adalah bahasa utama pembangunan web moden dan digunakan secara meluas untuk kepelbagaian dan fleksibiliti. 1) Pembangunan front-end: Membina laman web dinamik dan aplikasi satu halaman melalui operasi DOM dan kerangka moden (seperti React, Vue.js, sudut). 2) Pembangunan sisi pelayan: Node.js menggunakan model I/O yang tidak menyekat untuk mengendalikan aplikasi konkurensi tinggi dan masa nyata. 3) Pembangunan aplikasi mudah alih dan desktop: Pembangunan silang platform direalisasikan melalui reaktnatif dan elektron untuk meningkatkan kecekapan pembangunan.

Evolusi JavaScript: Trend Semasa dan Prospek Masa DepanEvolusi JavaScript: Trend Semasa dan Prospek Masa DepanApr 10, 2025 am 09:33 AM

Trend terkini dalam JavaScript termasuk kebangkitan TypeScript, populariti kerangka dan perpustakaan moden, dan penerapan webassembly. Prospek masa depan meliputi sistem jenis yang lebih berkuasa, pembangunan JavaScript, pengembangan kecerdasan buatan dan pembelajaran mesin, dan potensi pengkomputeran IoT dan kelebihan.

Demystifying JavaScript: Apa yang berlaku dan mengapa pentingDemystifying JavaScript: Apa yang berlaku dan mengapa pentingApr 09, 2025 am 12:07 AM

JavaScript adalah asas kepada pembangunan web moden, dan fungsi utamanya termasuk pengaturcaraan yang didorong oleh peristiwa, penjanaan kandungan dinamik dan pengaturcaraan tak segerak. 1) Pengaturcaraan yang didorong oleh peristiwa membolehkan laman web berubah secara dinamik mengikut operasi pengguna. 2) Penjanaan kandungan dinamik membolehkan kandungan halaman diselaraskan mengikut syarat. 3) Pengaturcaraan Asynchronous memastikan bahawa antara muka pengguna tidak disekat. JavaScript digunakan secara meluas dalam interaksi web, aplikasi satu halaman dan pembangunan sisi pelayan, sangat meningkatkan fleksibiliti pengalaman pengguna dan pembangunan silang platform.

Adakah Python atau JavaScript lebih baik?Adakah Python atau JavaScript lebih baik?Apr 06, 2025 am 12:14 AM

Python lebih sesuai untuk sains data dan pembelajaran mesin, manakala JavaScript lebih sesuai untuk pembangunan front-end dan penuh. 1. Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya, dan sesuai untuk analisis data dan pembangunan web. 2. JavaScript adalah teras pembangunan front-end. Node.js menyokong pengaturcaraan sisi pelayan dan sesuai untuk pembangunan stack penuh.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular