NodeJS рдХреНрд▓рд╕реНрдЯрд░-рд╣рдмред рдХреНрд▓рд╕реНрдЯрд░ рдореИрд╕реЗрдЬрд┐рдВрдЧ, рдЕрдиреБрд░реЛрдз, рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рдПрдХреНрд╕рдХреНрд▓реВрд╕рд┐рд╡ рд▓реЙрдХреНрд╕ (рдХреНрд░рд┐рдЯрд┐рдХрд▓ рд╕реЗрдХреНрд╢рди)

рдХреНрд▓рд╕реНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛, рдореБрдЭреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЗ рдмреАрдЪ рдореИрд╕реЗрдЬрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЙрдбреНрдпреВрд▓ рдХреА рдорд╛рдирдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛, рдФрд░ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░-рд╣рдм рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрд╛ред рд╢рд╛рдпрдж рдХреЛрдИ рдХрд╛рдо рдЖрдПрдЧрд╛ред

рдореЙрдбреНрдпреВрд▓ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ


рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ - рдореИрдВ рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реВрдВред


рд╕рдВрджреЗрд╢ рд╕реЗрд╡рд╛


рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрд╕ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣реА рд╣реИред рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рддрдХ, рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рд╕реЗ рдорд╛рд╕реНрдЯрд░ рддрдХ, рдорд╛рд╕реНрдЯрд░ рд╕реЗ рдорд╛рд╕реНрдЯрд░ рддрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рд╕рдВрднрд╡ рд╣реИред

var Hub = require('cluster-hub'); var cluster = require('cluster'); var hub = new Hub(cluster); if (cluster.isMaster) { var worker = cluster.fork(); hub.on('master-to-master', function (data) { console.log('master-to-master received'); }); hub.on('worker-to-master', function (data) { console.log('worker-to-master received'); }); hub.sendToMaster('master-to-master', 1); hub.sendToWorker(worker, 'master-to-worker'); } else { hub.on('master-to-worker', function () { console.log('master-to-worker received');; process.exit(); }); hub.sendToMaster('worker-to-master', 2); } 


рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз


рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЛ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рджреВрд╕рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдФрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдЦреБрдж рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдХрд╣реЗрдЧрд╛:

 var Hub = require('cluster-hub'); var cluster = require('cluster'); var hub = new Hub(cluster); if (cluster.isMaster) { // in master process hub.on('sum', function (data, sender, callback) { callback(null, data.a + data.b); }); var worker = cluster.fork(); } else { //in worker process hub.requestMaster('sum', {a: 1, b:2}, function (err, sum) { console.log('Sum in worker: ' + sum); process.exit(); }); } 

рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛, рдЖрдк рдорд╛рд╕реНрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП requestWorker рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд╛рд▓реЗ / рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдиреБрднрд╛рдЧ


рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЛ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЕрдирдиреНрдп рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдпрд╣ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ - рдорд╛рд╕реНрдЯрд░ рдпрд╛ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдореЗрдВ рд╕реЗ рдПрдХ)ред рдпрджрд┐ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓реЙрдХ рдХрд┐рдП рдЧрдП рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рдЕрдирд▓реЙрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рд░реЛрдХрддреА рд╣реИ, рддреЛ рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

 var Hub = require('cluster-hub'); var cluster = require('cluster'); var hub = new Hub(cluster); if (cluster.isMaster) { var worker = cluster.fork(); hub.lock('foo', function (unlock) { console.log('foo lock in master'); setTimeout(unlock, 1000); }); } else { hub.lock('foo', function (unlock) { console.log('foo lock in worker 1'); setTimeout(unlock, 500); }); hub.lock('bar', function (unlock) { console.log('bar lock in worker'); unlock(); }) hub.lock('foo', function (unlock) { console.log('second foo lock in worker'); unlock(); process.exit(); }) } 


рдореЙрдбреНрдпреВрд▓ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: github.com/sirian/node-cluster-hub

Source: https://habr.com/ru/post/In191192/


All Articles