modul nodejs untuk Komunikasi Antar Proses lokal dan jarak jauh dengan dukungan penuh untuk Linux, Mac dan Windows. Ini juga mendukung semua bentuk komunikasi soket dari soket unix dan windows tingkat rendah hingga UDP dan soket TLS dan TCP yang aman.
Solusi hebat untuk Neural Networking multiproses yang kompleks di Node.JS
npm install node-ipc
npm install node-ipc@^9.0.0
//es6
import ipc from 'node-ipc'
//commonjs
const ipc = require ( 'node-ipc' ) . default ;
npm info : Lihat tren dan statistik npm untuk node-ipc
Informasi GitHub:
Info Cakupan Kode:
Jalankan npm run coverage
untuk menghosting versi lokal laporan cakupan di localhost:8080 Format ini sama dengan Istanbul dan NYC. Itu pasti sangat familiar.
Pengujian dilakukan dengan vanilla-test
vanilla-test
terintegrasi dengan c8 untuk cakupan ESM asli tanpa perlu mentranspilasi kode Anda. Pada saat penulisan, ini adalah satu-satunya cara untuk menguji ESM secara native, dan ini luar biasa!
Situs web detail paket:
Karya ini dilisensikan melalui Lisensi MIT.
versi terbaru dari node-ipc
dapat bekerja dengan flag --harmony. Namun secara resmi, kami mendukung node v4 dan yang lebih baru dengan es5 dan es6
npm test
akan menjalankan tes melati dengan istanbul untuk node-ipc dan menghasilkan laporan cakupan di folder spesifikasi.
Anda mungkin ingin menginstal jasmine dan istanbul secara global dengan sudo npm install -g jasmine istanbul
Jenis | Stabilitas | Definisi |
---|---|---|
Soket Unix atau Soket Windows | Stabil | Memberikan komunikasi secepat kilat pada Linux, Mac, dan Windows dan menghindari kartu jaringan untuk mengurangi overhead dan latensi. Contoh Unix Lokal dan Soket Windows |
Soket TCP | Stabil | Memberikan komunikasi paling andal di seluruh jaringan. Dapat digunakan untuk IPC lokal juga, tetapi lebih lambat dibandingkan Implementasi Soket Unix #1 karena soket TCP melewati kartu jaringan sedangkan Soket Unix dan Soket Windows tidak. Contoh Soket TCP jaringan lokal atau jarak jauh |
Soket TLS | Stabil | Soket jaringan yang dapat dikonfigurasi dan aman melalui SSL. Setara dengan https. Dokumentasi TLS/SSL |
Soket UDP | Stabil | Memberikan komunikasi jaringan tercepat . UDP kurang dapat diandalkan tetapi jauh lebih cepat dibandingkan TCP. Ini paling baik digunakan untuk streaming data yang tidak penting seperti data suara, video, atau game multipemain karena dapat menjatuhkan paket tergantung pada konektivitas jaringan dan faktor lainnya. UDP dapat digunakan untuk IPC lokal juga, namun lebih lambat dibandingkan Soket Unix #1 atau Implementasi Soket Windows karena soket UDP melewati kartu jaringan sedangkan Soket Unix dan Windows tidak. Contoh Soket UDP jaringan lokal atau jarak jauh |
sistem operasi | Soket yang Didukung |
---|---|
Linux | Unix, Posix, TCP, TLS, UDP |
Mac | Unix, Posix, TCP, TLS, UDP |
Menang | Windows, TCP, TLS, UDP |
ipc.config
Tetapkan variabel-variabel ini dalam lingkup ipc.config
untuk menimpa atau menetapkan nilai default.
{
appspace : 'app.' ,
socketRoot : '/tmp/' ,
id : os . hostname ( ) ,
networkHost : 'localhost' , //should resolve to 127.0.0.1 or ::1 see the table below related to this
networkPort : 8000 ,
readableAll : false ,
writableAll : false ,
encoding : 'utf8' ,
rawBuffer : false ,
delimiter : 'f' ,
sync : false ,
silent : false ,
logInColor : true ,
logDepth : 5 ,
logger : console . log ,
maxConnections : 100 ,
retry : 500 ,
maxRetries : false ,
stopRetrying : false ,
unlink : true ,
interfaces : {
localAddress : false ,
localPort : false ,
family : false ,
hints : false ,
lookup : false
}
}
variabel | dokumentasi |
---|---|
ruang aplikasi | digunakan untuk spasi nama Unix Socket (Unix Domain Socket). Jika tidak diatur secara spesifik, Unix Domain Socket akan menggabungkan socketRoot, appspace, dan id untuk membentuk Unix Socket Path untuk pembuatan atau pengikatan. Ini tersedia jika Anda memiliki banyak aplikasi yang berjalan di sistem Anda, Anda mungkin memiliki beberapa soket dengan id yang sama, tetapi jika Anda mengubah ruang aplikasi, Anda masih memiliki soket unik khusus aplikasi. |
socketRoot | direktori tempat membuat atau mengikat ke Unix Socket |
pengenal | id soket atau layanan ini |
networkHost | host lokal atau jarak jauh tempat Soket TCP, TLS, atau UDP harus terhubung |
port jaringan | port default tempat soket TCP, TLS, atau UDP harus terhubung |
dapat dibacaSemua | membuat pipa dapat dibaca oleh semua pengguna termasuk layanan windows |
dapat ditulisSemua | membuat pipa dapat ditulis untuk semua pengguna termasuk layanan windows |
pengkodean | pengkodean default untuk data yang dikirim pada soket. Kebanyakan digunakan jika rawBuffer disetel ke true. Nilai yang valid adalah: ascii utf8 utf16le ucs2 base64 hex . |
buffer mentah | jika benar, data akan dikirim dan diterima sebagai node mentah Buffer BUKAN Object sebagai JSON. Ini bagus untuk IPC Biner atau hex, dan berkomunikasi dengan proses lain dalam bahasa seperti C dan C++ |
pembatas | pembatas di akhir setiap paket data. |
sinkronisasi | permintaan sinkron. Klien tidak akan mengirimkan permintaan baru sampai server menjawab. |
diam | mengaktifkan/menonaktifkan logging defaultnya salah yang berarti logging aktif |
logInColor | nyalakan/matikan util.inspeksi warna untuk ipc.log |
kedalaman log | atur kedalaman untuk util.inspect selama ipc.log |
penebang | fungsi yang menerima keluaran dari ipc.log; harus mengambil argumen string tunggal |
maxConnections | ini adalah jumlah maksimal koneksi yang diperbolehkan ke soket. Saat ini hanya sedang diatur pada Unix Sockets. Jenis Socket lainnya menggunakan default sistem. |
mencoba kembali | ini adalah waktu dalam milidetik klien akan menunggu sebelum mencoba menyambung kembali ke server jika sambungan terputus. Ini tidak mempengaruhi soket UDP karena mereka tidak memiliki hubungan server klien seperti Soket Unix dan Soket TCP. |
maxRetries | jika disetel, ini mewakili jumlah maksimum percobaan ulang setelah setiap pemutusan koneksi sebelum menyerah dan mematikan koneksi tertentu sepenuhnya |
berhentiMencoba lagi | Defaultnya adalah false yang berarti klien akan terus mencoba lagi untuk terhubung ke server tanpa batas waktu pada interval percobaan ulang. Jika disetel ke nomor apa pun, klien akan berhenti mencoba lagi ketika nomor tersebut terlampaui setelah setiap pemutusan sambungan. Jika disetel ke true dalam waktu nyata, upaya koneksi akan segera berhenti terlepas dari maxRetries. Jika disetel ke 0, klien TIDAK akan mencoba menyambung kembali. |
putuskan tautan | Defaultnya adalah true yang berarti bahwa modul akan menghapus soket IPC sebelum startup. Jika Anda menggunakan node-ipc di lingkungan berkerumun di mana akan ada beberapa pendengar pada soket yang sama, Anda harus menyetelnya ke false dan kemudian berhati-hati dalam menghapus soket dalam kode Anda sendiri. |
antarmuka | terutama digunakan ketika menentukan antarmuka mana yang harus dihubungkan oleh klien. lihat dokumentasi socket.connect di api node.js |
Metode-metode ini tersedia dalam Lingkup IPC.
ipc.log(a,b,c,d,e...);
ipc.log akan menerima sejumlah argumen dan jika ipc.config.silent
tidak disetel, ia akan menggabungkan semuanya dengan satu spasi ' ' di antara argumen-argumen tersebut dan kemudian mencatatnya ke konsol. Ini cepat karena mencegah terjadinya penggabungan jika ipc.config.silent disetel true
. Dengan begitu, jika Anda membiarkan logging di tempatnya, hal itu hampir tidak berpengaruh pada kinerja.
Log juga menggunakan util.inspect. Anda dapat mengontrol apakah log harus memasukkan warna, kedalaman log, dan tujuan melalui ipc.config
ipc . config . logInColor = true ; //default
ipc . config . logDepth = 5 ; //default
ipc . config . logger = console . log . bind ( console ) ; // default
ipc.connectTo(id,path,callback);
Digunakan untuk menghubungkan sebagai klien ke Soket Unix lokal dan Soket Windows. Ini adalah cara tercepat bagi proses di mesin yang sama untuk berkomunikasi karena melewati kartu jaringan yang harus digunakan oleh TCP dan UDP.
variabel | diperlukan | definisi |
---|---|---|
pengenal | diperlukan | adalah id string dari soket yang dihubungkan. Soket dengan id ini ditambahkan ke objek ipc.of saat dibuat. |
jalur | opsional | adalah jalur File Soket Domain Unix, jika Sistemnya adalah Windows, ini akan secara otomatis dikonversi ke pipa yang sesuai dengan informasi yang sama dengan File Soket Domain Unix. Jika tidak disetel, ini akan menjadi default ipc.config.socketRoot + ipc.config.appspace + id |
panggilan balik | opsional | ini adalah fungsi yang dijalankan ketika soket telah dibuat. |
contoh argumen dapat dihilangkan selama masih berurutan.
ipc . connectTo ( 'world' ) ;
atau hanya menggunakan id dan panggilan balik
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'hello' ,
function ( data ) {
ipc . log ( data . debug ) ;
//if data was a string, it would have the color set to the debug style applied to it
}
)
}
) ;
atau secara eksplisit mengatur jalurnya
ipc . connectTo (
'world' ,
'myapp.world'
) ;
atau secara eksplisit mengatur jalur dengan panggilan balik
ipc . connectTo (
'world' ,
'myapp.world' ,
function ( ) {
...
}
) ;
ipc.connectToNet(id,host,port,callback)
Digunakan untuk terhubung sebagai klien ke soket TCP atau TLS melalui kartu jaringan. Ini bisa bersifat lokal atau jarak jauh, jika lokal, disarankan agar Anda menggunakan Implementasi Soket Unix dan Windows dari connectTo
karena ini jauh lebih cepat karena menghindari kartu jaringan sama sekali.
Untuk TLS dan Soket SSL, lihat dokumen TLS dan SSL node-ipc. Mereka memiliki beberapa persyaratan tambahan, dan hal-hal yang perlu diketahui sehingga memiliki dokumen sendiri.
variabel | diperlukan | definisi |
---|---|---|
pengenal | diperlukan | adalah id string dari soket yang dihubungkan. Untuk soket TCP & TLS, id ini ditambahkan ke objek ipc.of saat soket dibuat dengan referensi ke soket. |
tuan rumah | opsional | adalah host tempat soket TCP atau TLS berada. Ini akan menjadi default ipc.config.networkHost jika tidak ditentukan. |
pelabuhan | opsional | port tempat soket TCP atau TLS berada. |
panggilan balik | opsional | ini adalah fungsi yang dijalankan ketika soket telah dibuat. |
contoh argumen dapat dihilangkan selama masih berurutan.
Jadi walaupun defaultnya adalah : (id,host,port,callback), contoh berikut akan tetap berfungsi karena masih berurutan (id,port,callback) atau (id,host,callback) atau (id,port) dll .
ipc . connectToNet ( 'world' ) ;
atau hanya menggunakan id dan panggilan balik
ipc . connectToNet (
'world' ,
function ( ) {
...
}
) ;
atau secara eksplisit mengatur host dan jalur
ipc . connectToNet (
'world' ,
'myapp.com' , serve ( path , callback )
3435
) ;
atau hanya secara eksplisit mengatur port dan panggilan balik
ipc . connectToNet (
'world' ,
3435 ,
function ( ) {
...
}
) ;
ipc.disconnect(id)
Digunakan untuk memutuskan sambungan klien dari soket Unix, Windows, TCP atau TLS. Soket dan referensinya akan dihapus dari memori dan cakupan ipc.of
Ini bisa bersifat lokal atau jarak jauh. Klien UDP tidak memelihara koneksi sehingga tidak ada Klien dan metode ini tidak ada nilainya bagi mereka.
variabel | diperlukan | definisi |
---|---|---|
pengenal | diperlukan | adalah string id dari soket yang akan diputuskan sambungannya. |
contoh
ipc . disconnect ( 'world' ) ;
ipc.serve(path,callback);
Digunakan untuk membuat Unix Socket Server lokal atau Windows Socket Server yang dapat diikat oleh Klien. Server dapat emit
kejadian ke Soket Klien tertentu, atau broadcast
kejadian ke semua Soket Klien yang diketahui.
variabel | diperlukan | definisi |
---|---|---|
jalur | opsional | Ini adalah jalur File Soket Domain Unix, jika Sistemnya adalah Windows, ini akan secara otomatis dikonversi ke pipa yang sesuai dengan informasi yang sama dengan File Soket Domain Unix. Jika tidak disetel, ini akan menjadi default ipc.config.socketRoot + ipc.config.appspace + id |
panggilan balik | opsional | Ini adalah fungsi yang dipanggil setelah Server dimulai. Hal ini juga bisa dilakukan dengan mengikat suatu kejadian ke kejadian awal seperti ipc.server.on('start',function(){}); |
contoh argumen dapat dihilangkan selama masih berurutan.
ipc . serve ( ) ;
atau menentukan panggilan balik
ipc . serve (
function ( ) { ... }
) ;
atau tentukan jalur
ipc . serve (
'/tmp/myapp.myservice'
) ;
atau menentukan segalanya
ipc . serve (
'/tmp/myapp.myservice' ,
function ( ) { ... }
) ;
serveNet(host,port,UDPType,callback)
Digunakan untuk membuat Server Soket TCP, TLS, atau UDP tempat Klien dapat mengikat atau server lain dapat mengirim data. Server dapat emit
kejadian ke Soket Klien tertentu, atau broadcast
kejadian ke semua Soket Klien yang diketahui.
variabel | diperlukan | definisi |
---|---|---|
tuan rumah | opsional | Jika tidak ditentukan, defaultnya adalah alamat pertama di os.networkInterfaces(). Untuk server TCP, TLS & UDP kemungkinan besar ini adalah 127.0.0.1 atau ::1 |
pelabuhan | opsional | Port tempat server Socket TCP, UDP, atau TLS akan diikat, defaultnya adalah 8000 jika tidak ditentukan |
Tipe UDP | opsional | Jika disetel, ini akan membuat server sebagai soket UDP. 'udp4' atau 'udp6' adalah nilai yang valid. Ini secara default tidak disetel. Saat menggunakan udp6 pastikan untuk menentukan host IPv6 yang valid, seperti ::1 |
panggilan balik | opsional | Fungsi yang akan dipanggil saat server dibuat |
contoh argumen dapat dihilangkan selama masih berurutan.
server tcp bawaan
ipc . serveNet ( ) ;
server udp bawaan
ipc . serveNet ( 'udp4' ) ;
atau menentukan server TCP dengan panggilan balik
ipc . serveNet (
function ( ) { ... }
) ;
atau menentukan server UDP dengan panggilan balik
ipc . serveNet (
'udp4' ,
function ( ) { ... }
) ;
atau tentukan port
ipc . serveNet (
3435
) ;
atau menentukan semuanya TCP
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
function ( ) { ... }
) ;
atau menentukan semuanya UDP
ipc . serveNet (
'MyMostAwesomeApp.com' ,
3435 ,
'udp4' ,
function ( ) { ... }
) ;
variabel | definisi |
---|---|
ipc.of | Di sinilah referensi koneksi soket akan disimpan saat menghubungkannya sebagai klien melalui ipc.connectTo atau iupc.connectToNet . Mereka akan disimpan berdasarkan ID yang digunakan untuk membuatnya, misalnya : ipc.of.mySocket |
ipc.server | Ini adalah referensi ke server yang dibuat oleh ipc.serve atau ipc.serveNet |
metode | definisi |
---|---|
awal | mulai melayani perlu memanggil serve atau serveNet terlebih dahulu untuk menyiapkan server |
berhenti | tutup server dan berhenti melayani |
nama acara | param | definisi |
---|---|---|
kesalahan | salah keberatan | dipicu ketika kesalahan terjadi |
menghubungkan | dipicu ketika soket terhubung | |
memutuskan | dipicu oleh klien ketika soket terputus dari server | |
soket.terputus | soket hancurSocketID | dipicu oleh server ketika soket klien terputus |
menghancurkan | dipicu ketika soket telah hancur total, tidak ada percobaan ulang otomatis yang akan terjadi dan semua referensi hilang. | |
data | penyangga | dipicu ketika ipc.config.rawBuffer benar dan pesan diterima. |
jenis acara Anda | data acara Anda | dipicu ketika pesan JSON diterima. Nama event akan menjadi tipe string dari pesan Anda dan param akan menjadi objek data dari pesan Anda misalnya : { type:'myEvent',data:{a:1}} |
Terkadang Anda mungkin memerlukan instance node-ipc yang eksplisit dan independen. Hanya untuk skenario seperti itu kami telah mengekspos kelas inti IPC pada IPC singleton.
import { IPCModule } from 'node-ipc' ;
const ipc = new RawIPC ;
const someOtherExplicitIPC = new RawIPC ;
//OR
const ipc = from 'node-ipc' ) ;
const someOtherExplicitIPC = new ipc . IPC ;
//setting explicit configs
//keep one silent and the other verbose
ipc . config . silent = true ;
someOtherExplicitIPC . config . silent = true ;
//make one a raw binary and the other json based ipc
ipc . config . rawBuffer = false ;
someOtherExplicitIPC . config . rawBuffer = true ;
someOtherExplicitIPC . config . encoding = 'hex' ;
Anda dapat menemukan Contoh Lanjutan di folder contoh. Dalam contoh, Anda akan menemukan demo yang lebih kompleks termasuk contoh multiklien.
Server adalah proses menjaga soket untuk IPC tetap terbuka. Beberapa soket dapat terhubung ke server ini dan berbicara dengannya. Itu juga dapat disiarkan ke semua klien atau dipancarkan ke klien tertentu. Ini adalah contoh paling dasar yang dapat digunakan untuk Soket Unix dan Windows lokal serta Soket TCP jaringan lokal atau jarak jauh.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serve (
function ( ) {
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message : ' . debug , data ) ;
ipc . server . emit (
socket ,
'message' , //this can be anything you want so long as
//your client knows.
data + ' world!'
) ;
}
) ;
ipc . server . on (
'socket.disconnected' ,
function ( socket , destroyedSocketID ) {
ipc . log ( 'client ' + destroyedSocketID + ' has disconnected!' ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
Klien terhubung ke soket server untuk Komunikasi Antar Proses. Soket akan menerima peristiwa yang dipancarkan secara khusus serta peristiwa yang disiarkan keluar pada soket oleh server. Ini adalah contoh paling dasar yang dapat digunakan untuk Soket Unix lokal dan Soket TCP jaringan lokal atau jarak jauh.
import ipc from 'node-ipc' ;
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . connectTo (
'world' ,
function ( ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . log ( '## connected to world ##' . rainbow , ipc . config . delay ) ;
ipc . of . world . emit (
'message' , //any event or message type your server listens for
'hello'
)
}
) ;
ipc . of . world . on (
'disconnect' ,
function ( ) {
ipc . log ( 'disconnected from world' . notice ) ;
}
) ;
ipc . of . world . on (
'message' , //any event or message type your server listens for
function ( data ) {
ipc . log ( 'got a message from world : ' . debug , data ) ;
}
) ;
}
) ;
Soket UDP berbeda dari Soket Unix, Windows & TCP karena harus terikat pada port unik di mesinnya untuk menerima pesan. Misalnya, klien TCP, Unix, atau Windows Socket dapat terhubung ke server TCP, Unix, atau Windows Socket yang terpisah. Klien tersebut kemudian dapat bertukar, mengirim dan menerima, data pada port atau lokasi server. Soket UDP tidak dapat melakukan ini. Mereka harus mengikat ke port untuk menerima atau mengirim data.
Ini berarti Klien dan Server UDP adalah hal yang sama karena untuk menerima data, Soket UDP harus memiliki portnya sendiri untuk menerima data, dan hanya satu proses yang dapat menggunakan port ini pada satu waktu. Hal ini juga berarti bahwa untuk emit
atau broadcast
data, server UDP perlu mengetahui host dan port Socket yang akan dijadikan tujuan penyiaran data.
Ini adalah contoh paling dasar yang dapat digunakan untuk Soket UDP lokal dan jarak jauh.
import ipc from 'node-ipc' ;
ipc . config . id = 'world' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
'udp4' ,
function ( ) {
console . log ( 123 ) ;
ipc . server . on (
'message' ,
function ( data , socket ) {
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
ipc . server . emit (
socket ,
'message' ,
{
from : ipc . config . id ,
message : data . message + ' world!'
}
) ;
}
) ;
console . log ( ipc . server ) ;
}
) ;
ipc . server . start ( ) ;
catatan kami mengatur port di sini ke 8001 karena server dunia sudah menggunakan ipc.config.networkPort default 8000. Jadi kami tidak dapat mengikat ke 8000 saat dunia menggunakannya.
ipc . config . id = 'hello' ;
ipc . config . retry = 1500 ;
ipc . serveNet (
8001 ,
'udp4' ,
function ( ) {
ipc . server . on (
'message' ,
function ( data ) {
ipc . log ( 'got Data' ) ;
ipc . log ( 'got a message from ' . debug , data . from . variable , ' : ' . debug , data . message . variable ) ;
}
) ;
ipc . server . emit (
{
address : '127.0.0.1' , //any hostname will work
port : ipc . config . networkPort
} ,
'message' ,
{
from : ipc . config . id ,
message : 'Hello'
}
) ;
}
) ;
ipc . server . start ( ) ;
Soket biner atau Buffer dapat digunakan dengan salah satu jenis soket di atas, namun cara peristiwa data dipancarkan sedikit berbeda. Ini mungkin berguna jika bekerja dengan sistem tertanam atau proses C/C++. Anda bahkan dapat memastikan untuk mencocokkan pengetikan string C atau C++.
Saat menyiapkan soket rawBuffer Anda harus menentukannya sebagai berikut:
ipc . config . rawBuffer = true ;
Anda juga dapat menentukan jenis pengkodeannya. Standarnya adalah utf8
ipc . config . encoding = 'utf8' ;
memancarkan buffer string:
//server
ipc . server . emit (
socket ,
'hello'
) ;
//client
ipc . of . world . emit (
'hello'
)
memancarkan buffer array byte:
//hex encoding may work best for this.
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 10 , 20 , 30 ]
) ;
//client
ipc . server . emit (
[ 10 , 20 , 30 ]
) ;
memancarkan buffer array biner atau hex, ini yang terbaik untuk transfer data waktu nyata, terutama saat menghubungkan ke proses C atau C++, atau sistem tertanam:
ipc . config . encoding = 'hex' ;
//server
ipc . server . emit (
socket ,
[ 0x05 , 0x6d , 0x5c ]
) ;
//client
ipc . server . emit (
[ 0x05 , 0x6d , 0x5c ]
) ;
Menulis buffer eksplisit, tipe int, double, float, dll. serta data big endian dan little endian ke buffer mentah yang sangat berguna saat menghubungkan ke proses C atau C++, atau sistem tertanam (lihat info lebih detail tentang buffer serta UInt, Int , double dll. di sini)[https://nodejs.org/api/buffer.html]:
ipc . config . encoding = 'hex' ;
//make a 6 byte buffer for example
const myBuffer = Buffer . alloc ( 6 ) . fill ( 0 ) ;
//fill the first 2 bytes with a 16 bit (2 byte) short unsigned int
//write a UInt16 (2 byte or short) as Big Endian
myBuffer . writeUInt16BE (
2 , //value to write
0 //offset in bytes
) ;
//OR
myBuffer . writeUInt16LE ( 0x2 , 0 ) ;
//OR
myBuffer . writeUInt16LE ( 0x02 , 0 ) ;
//fill the remaining 4 bytes with a 32 bit (4 byte) long unsigned int
//write a UInt32 (4 byte or long) as Big Endian
myBuffer . writeUInt32BE (
16772812 , //value to write
2 //offset in bytes
) ;
//OR
myBuffer . writeUInt32BE ( 0xffeecc , 0 )
//server
ipc . server . emit (
socket ,
myBuffer
) ;
//client
ipc . server . emit (
myBuffer
) ;
cluster
node-ipc
dapat digunakan dengan modul cluster Node.js untuk menyediakan kemampuan memiliki banyak pembaca untuk satu soket. Melakukannya hanya mengharuskan Anda menyetel properti unlink
di konfigurasi ke false
dan berhati-hati dalam memutuskan tautan jalur soket di proses master:
import fs from 'fs' ;
import ipc from 'node-ipc' ;
import { cpus } from 'os' ;
import cluster from 'cluster' ;
const cpuCount = cpus ( ) . length ;
const socketPath = '/tmp/ipc.sock' ;
ipc . config . unlink = false ;
if ( cluster . isMaster ) {
if ( fs . existsSync ( socketPath ) ) {
fs . unlinkSync ( socketPath ) ;
}
for ( let i = 0 ; i < cpuCount ; i ++ ) {
cluster . fork ( ) ;
}
} else {
ipc . serve (
socketPath ,
function ( ) {
ipc . server . on (
'currentDate' ,
function ( data , socket ) {
console . log ( `pid ${ process . pid } got: ` , data ) ;
}
) ;
}
) ;
ipc . server . start ( ) ;
console . log ( `pid ${ process . pid } listening on ${ socketPath } ` ) ;
}
import fs from 'fs' ;
import ipc from 'node-ipc' ;
const socketPath = '/tmp/ipc.sock' ;
//loop forever so you can see the pid of the cluster sever change in the logs
setInterval (
function ( ) {
ipc . connectTo (
'world' ,
socketPath ,
connecting
) ;
} ,
2000
) ;
function connecting ( socket ) {
ipc . of . world . on (
'connect' ,
function ( ) {
ipc . of . world . emit (
'currentDate' ,
{
message : new Date ( ) . toISOString ( )
}
) ;
ipc . disconnect ( 'world' ) ;
}
) ;
}
Lihat file lisensi MIT.
Saya minta maaf.