[REDIS] 가장 효율적인 Node.js를 프로세스 간 통신 라이브러리 / 방법은 무엇입니까?
REDIS가장 효율적인 Node.js를 프로세스 간 통신 라이브러리 / 방법은 무엇입니까?
우리는 메시지를 전달할 수 있어야합니다 몇 Node.js를 프로세스를 그 일을 가장 효율적인 방법은 무엇입니까? 어떻게 node_redis 술집 / 하위 사용에 대한
편집 : 프로세스가 다른 컴퓨터에서 실행될 수 있습니다
해결법
-
==============================
1.당신이 한 컴퓨터에서 다른 컴퓨터로 메시지를 전송하고 콜백에 대한 상관 없어 원한다면 레디 스 선술집 / 서브 최적의 솔루션입니다. 그것은 구현하기가 정말 쉽습니다와 레디 스 정말 빠릅니다.
당신이 한 컴퓨터에서 다른 컴퓨터로 메시지를 전송하고 콜백에 대한 상관 없어 원한다면 레디 스 선술집 / 서브 최적의 솔루션입니다. 그것은 구현하기가 정말 쉽습니다와 레디 스 정말 빠릅니다.
첫째로 당신은 당신의 시스템 중 하나에서 레디 스를 설치해야합니다.
레디 스에 연결하기 위해 정말 쉽습니다 :
var client = require('redis').createClient(redis_port, redis_host);
그러나 방화벽에서 레디 스 포트를 열기에 대해 잊지 마세요!
그럼 당신은 어떤 채널에 각 기계를 구독 할 수 있습니다 :
client.on('ready', function() { return client.subscribe('your_namespace:machine_name'); }); client.on('message', function(channel, json_message) { var message; message = JSON.parse(message); // do whatever you vant with the message });
당신은 your_namespace를 생략하고 글로벌 네임 스페이스를 사용하지만 조만간 그것을 후회하게 될 수 있습니다.
너무, 메시지를 보낼 정말 쉽습니다 :
var send_message = function(machine_name, message) { return client.publish("your_namespace:" + machine_name, JSON.stringify(message)); };
당신이 메시지의 다른 종류를 보낼 경우, 대신 메시지 pmessages을 사용할 수 있습니다 :
client.on('ready', function() { return client.psubscribe('your_namespace:machine_name:*'); }); client.on('pmessage', function(pattern, channel, json_message) { // pattern === 'your_namespace:machine_name:*' // channel === 'your_namespace:machine_name:'+message_type var message = JSON.parse(message); var message_type = channel.split(':')[2]; // do whatever you want with the message and message_type }); send_message = function(machine_name, message_type, message) { return client.publish([ 'your_namespace', machine_name, message_type ].join(':'), JSON.stringify(message)); };
가장 좋은 방법은 (예를 들어 '의 send_email') 그 기능하여 프로세스 (또는 기계) 이름을 지정하는 것입니다. 더 하나 개의 기능을 구현하는 경우보다 그 경우의 공정에서, (또는 시스템)는 하나 개 이상의 채널에 등록 할 수있다.
사실, 레디 스를 사용하여 양방향 통신을 구축하는 것이 가능하다. 그러나 그것은 문맥을 잃지 않고 콜백 받기 위해 각 메시지에 고유의 콜백 채널 이름을 추가 할 필요하기 때문에 더 까다입니다.
그래서, 내 결론은 이것이다 : 사용 레디 스 만약 당신이 필요 당신이 본격적인 양방향 통신을 필요로하는 경우 다른 솔루션을 연구, "보내고 잊어"통신.
-
==============================
2.왜 IPC에 대한 ZeroMQ / 0mq를 사용하지? 레디 스 (데이터베이스)는 IPC로 간단하게 일을위한 오버 죽입니다.
왜 IPC에 대한 ZeroMQ / 0mq를 사용하지? 레디 스 (데이터베이스)는 IPC로 간단하게 일을위한 오버 죽입니다.
가이드를 인용 :
0MQ 사용의 장점 (노드 코어 순 라이브러리를 통해 또는 바닐라 소켓을 뺀 0MQ 소켓에서 제공하는 모든 기능)은 더 마스터 프로세스가 없다는 것입니다. 그 브로커가없는 설정은 당신이 설명하는 시나리오에 가장 적합합니다. 당신은 단지 하나 개의 중앙 처리에서 다양한 노드에 메시지를 밀어하는 경우 (또한 PGM / EPGM를 통해 IP 멀티 캐스트 지원) 0mq에 PUB / SUB 소켓을 사용할 수 있습니다. 그 외에도, 0mq 또한 사용자 정의 장치를 만들 수있는 다양한 서로 다른 소켓 타입 (PUSH / PULL / XREP / XREQ / 라우터 / 대리점)을 제공한다.
이 훌륭한 가이드와 함께 시작 http://zguide.zeromq.org/page:all
0MQ 2.x를 들어 :
http://github.com/JustinTulloss/zeromq.node
0MQ 3.x를 들어. (상기 모듈이 포크 지지부 출판사 측 PUBSUB 필터링)
http://github.com/shripadk/zeromq.node
-
==============================
3.질문 후 4 년 이상 노드-IPC라는 프로세스 간 통신 모듈이 부탁드립니다. 그것은 적어도 소켓에서 TCP와 UDP가 안정적 주장, 동일한 시스템에 통신뿐만 아니라 TCP, TLS 및 UDP에 대한 유닉스 / 윈도우 소켓을 지원합니다.
질문 후 4 년 이상 노드-IPC라는 프로세스 간 통신 모듈이 부탁드립니다. 그것은 적어도 소켓에서 TCP와 UDP가 안정적 주장, 동일한 시스템에 통신뿐만 아니라 TCP, TLS 및 UDP에 대한 유닉스 / 윈도우 소켓을 지원합니다.
다음은 GitHub의 저장소에서 문서에서 가져온 작은 예입니다 :
유닉스 소켓, Windows 소켓과 TCP 소켓 서버
var ipc=require('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', data+' world!' ); } ); } ); ipc.server.start();
유닉스 소켓 및 TCP 소켓 용 클라이언트
var ipc=require('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', 'hello' ) } ); ipc.of.world.on( 'disconnect', function(){ ipc.log('disconnected from world'.notice); } ); ipc.of.world.on( 'message', function(data){ ipc.log('got a message from world : '.debug, data); } ); } );
필자는 현재 대체 지역 IPC이 모듈을 평가하는 (그러나 미래의 원격 IPC 수) 표준 입력 / 표준 출력을 통해 기존 솔루션에 대한 대체. 나는 좀 더 많은 정보를 어떻게 그리고 얼마나 좋은이 모듈이 작동을 제공하기 위해 수행하고있을 때 어쩌면 내 대답을 확장됩니다.
-
==============================
4.노드가 제공하는 기능 내장으로 내가 시작합니다. 당신은 같은 신호 프로세스를 사용할 수 있습니다 :
노드가 제공하는 기능 내장으로 내가 시작합니다. 당신은 같은 신호 프로세스를 사용할 수 있습니다 :
process.on('SIGINT', function () { console.log('Got SIGINT. Press Control-D to exit.'); });
이 신호
당신이 과정에 대해 알게되면 당신은 자식 프로세스를 spwn 및 PIN이 메시지를 보낼 수있는 메시지 이벤트로를 연결 할 수 있습니다. child_process.fork를 사용하는 경우 () 당신은 child.send를 사용하여 아이를 쓸 수 있습니다 (메시지, [sendHandle]) 및 메시지는 자녀에 '메시지'이벤트에 의해 수신됩니다.
또한 - 당신은 클러스터를 사용할 수 있습니다. 클러스터 모듈은 쉽게 프로세스의 모든 공유 서버 포트의 네트워크를 만들 수 있습니다.
var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { // Workers can share any TCP connection // In this case its a HTTP server http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }
제 3 자 서비스의 당신은 확인할 수 있습니다 : hook.io, 신호 콩.
-
==============================
5.노드 메신저를 살펴
노드 메신저를 살펴
https://github.com/weixiyen/messenger.js
가장 쉽게 요구에 맞게 (술집 / 서브 ... 화재와 .. 보내기 / 요청을 잊지) 자동 유지 connectionpool와 함께합니다
-
==============================
6.우리는 실시간 프로세스 간 메시지의 많은 수를 처리하는 데 필요한 다중 프로세스 노드 앱에 노력하고 있습니다.
우리는 실시간 프로세스 간 메시지의 많은 수를 처리하는 데 필요한 다중 프로세스 노드 앱에 노력하고 있습니다.
우리는 요구 사항을 충족하는 데 실패하는 최초의 레디 스 - 술집 - 서브를 시도했다.
그런 다음 최선을 개선했다 TCP 소켓을 시도했지만 아직도.
우리가 UDP 데이터 그램으로 전환 그래서, 그 훨씬 빠릅니다.
여기에 코드의 repo, 코드 라인의 몇 가지입니다. https://github.com/SGF-Games/node-udpcomm
from https://stackoverflow.com/questions/6463945/whats-the-most-efficient-node-js-inter-process-communication-library-method by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 레디 스 키 Jedis로 통지를 만료 (0) | 2019.12.30 |
---|---|
[REDIS] PHP와 노드 사이의 공유 세션 (0) | 2019.12.30 |
[REDIS] 직접 메모리를 사용하여 대 레디 스 캐시 (0) | 2019.12.30 |
[REDIS] 키 이름 지정 규칙을 레디 스? (0) | 2019.12.30 |
[REDIS] 마라톤에서 실행 레디 스 (메소) 하나의 URL에서 (0) | 2019.12.30 |