부모-자식 프로세스
간에 주로 사용메시지 큐(Message Queues)
brew install rabbitmq
npm install amqplib
brew services start rabbitmq
send.js
#!/usr/bin/env node
const amqp = require("amqplib/callback_api");
// Create connection
amqp.connect("amqp://localhost", (err, conn) => {
if (err) {
console.error(err);
process.exit(1);
}
// Create channel
conn.createChannel((err, ch) => {
if (err) {
console.error(err);
process.exit(1);
}
// Name of the queue
const q = "hello";
// Declare the queue
ch.assertQueue(q, { durable: false });
// Send message to the queue
ch.sendToQueue(q, Buffer.from("Hello World!")); // 수정된 부분
console.log(" [x] Sent 'Hello World'");
// Close the connection and exit
setTimeout(() => {
conn.close();
process.exit(0);
}, 500);
});
});
receive.js
#!/usr/bin/env node
const amqp = require("amqplib/callback_api");
// Create connection
amqp.connect("amqp://localhost", (err, conn) => {
// Create channel
conn.createChannel((err, ch) => {
// Name of the queue
const q = "hello";
// Declare the queue
ch.assertQueue(q, { durable: false });
// Wait for Queue Messages
console.log(` [*] Waiting for messages in ${q}. To exit press CTRL+C`);
ch.consume(
q,
(msg) => {
console.log(` [x] Received ${msg.content.toString()}`);
},
{ noAck: true }
);
});
});
sudo chmod 755 send.js
sudo chmod 755 receive.js
brew services stop rabbitmq
공유 메모리(Shared Memory)
메모리 맵(Memory-Mapped Files)
소켓(Sockets)
시그널(Signals)
세마포어(Semaphores)
파일(File)
a.js
const path = require("path");
const pt = path.join(__dirname, "a.json");
const fs = require("fs");
setInterval(() => {
try {
if (fs.existsSync(pt)) {
console.log("파일을 읽습니다.");
const ret = JSON.parse(fs.readFileSync(pt));
console.log(ret);
}
} catch (err) {
console.error(err);
}
}, 3000);
console.log("process 1이 가동됩니다.");
b.js
const path = require("path");
const pt = path.join(__dirname, "a.json");
const fs = require("fs");
setTimeout(() => {
const a = { a: 1 };
fs.writeFileSync(pt, JSON.stringify(a));
}, 3000);
console.log("process 2가 가동됩니다.");