自己回答になります。UDP datagram を利用する方法が実用面、速度面ともベストかもしれません。
間違い、その他の良い方法があればご指摘おねがいします。
- process.on process.send での親子プロセス間メッセージ送受信(利用できないケースあり)
- udp datagram によるメッセージ送受信(プロセス間メッセージを利用できないケースではベスト)
- redis Pub/Sub を介してのデータ送受信(遅さを許容できる場合はベスト)
※prosess.sendを利用できないケース
待ち受けしているworkerで都度、分散計算処理を行いたい場合、process.sendはfork後、
初回しか 子→親 の送信をしませんでした。このようなケースでは、udp datagramを利用することで
都度、子→親へデータを共有が可能となりました。redis pub/subでは速度的に問題がありブロックが
発生しました。
javascript
1//### parent.js
2var cluster = require('cluster');
3var dgram = require('dgram');
4var udp_server = dgram.createSocket('udp4');
5:
6 if(cluster.isMaster) {
7 //udp server メッセージ待ち受け箇所
8 udp_server.on('message', function (message) {
9 console.log('UDP: received a message: ' + message);
10 });
11 var port = 4000;
12 udp_server.bind(port);
13 }
14:
15
16//### clustered-child.js
17var dgram = require('dgram');
18var udp_client = dgram.createSocket('udp4');
19:
20//udp datagram で親プロセスにデータ送信
21 var message = new Buffer('send msg from child process');
22 udp_client.send(message, 0, message.length, 4000, '0.0.0.0');
23:
24
25//#datagramのため大量のデータを共有する必要があるケースでは別の方法を検討すべきかも
26
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/26 04:06