added example files to example/cluster/* tweaked readme style example
This commit is contained in:
parent
e297474e1c
commit
1d8fae31ec
6 changed files with 1359 additions and 67 deletions
94
README.md
94
README.md
|
@ -799,55 +799,77 @@ Writing explicit buffers, int types, doubles, floats etc. as well as big endian
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
|
||||||
var fs = require('fs');
|
const fs = require('fs');
|
||||||
var ipc = require('node-ipc');
|
const ipc=require('../../../node-ipc');
|
||||||
var cpuCount = require('os').cpus().length;
|
const cpuCount = require('os').cpus().length;
|
||||||
var cluster = require('cluster');
|
const cluster = require('cluster');
|
||||||
var socketPath = '/tmp/ipc.sock';
|
const socketPath = '/tmp/ipc.sock';
|
||||||
|
|
||||||
ipc.config.unlink = false;
|
ipc.config.unlink = false;
|
||||||
|
|
||||||
if (cluster.isMaster) {
|
if (cluster.isMaster) {
|
||||||
if (fs.existsSync(socketPath)) {
|
if (fs.existsSync(socketPath)) {
|
||||||
fs.unlinkSync(socketPath);
|
fs.unlinkSync(socketPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0; i < cpuCount; i++) {
|
for (let i = 0; i < cpuCount; i++) {
|
||||||
cluster.fork();
|
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}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
else {
|
```
|
||||||
ipc.serve(socketPath, function() {
|
|
||||||
ipc.server.on('message', function(data) {
|
|
||||||
console.log('pid ' + process.pid + ' got: ' + data.message);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
ipc.server.start();
|
|
||||||
console.log('pid ' + process.pid + ' listening on ' + socketPath);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Client
|
##### Client
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
|
||||||
var fs = require('fs');
|
const fs = require('fs');
|
||||||
var ipc = require('node-ipc');
|
const ipc = require('../../node-ipc');
|
||||||
|
|
||||||
var socketPath = '/tmp/ipc.sock';
|
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');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
setInterval(function() {
|
|
||||||
ipc.connectTo('world', socketPath, function(socket) {
|
|
||||||
ipc.of.world.on('connect', function() {
|
|
||||||
ipc.of.world.emit('message', {
|
|
||||||
message: new Date().toISOString()
|
|
||||||
});
|
|
||||||
ipc.disconnect('world');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}, 2000);
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Licensed under DBAD license
|
#### Licensed under DBAD license
|
||||||
|
|
31
example/clusterUnixSocket/cluster-client.js
Normal file
31
example/clusterUnixSocket/cluster-client.js
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const ipc = require('../../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');
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
32
example/clusterUnixSocket/cluster-server.js
Normal file
32
example/clusterUnixSocket/cluster-server.js
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const ipc=require('../../../node-ipc');
|
||||||
|
const cpuCount = require('os').cpus().length;
|
||||||
|
const cluster = require('cluster');
|
||||||
|
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}`);
|
||||||
|
}
|
1209
package-lock.json
generated
Normal file
1209
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load diff
|
@ -15,10 +15,9 @@
|
||||||
"js-queue": "2.0.0"
|
"js-queue": "2.0.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"codacy-coverage": "1.1.3",
|
"codacy-coverage": "2.0.0",
|
||||||
"jasmine": "2.4.1",
|
"jasmine": "2.4.1",
|
||||||
"istanbul": "0.4.1",
|
"istanbul": "0.4.1",
|
||||||
"codacy-coverage": "2.0.0",
|
|
||||||
"node-cmd": "2.0.0"
|
"node-cmd": "2.0.0"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -28,7 +27,7 @@
|
||||||
"coverup": "cat ./spec/coverage/lcov.info | codacy-coverage"
|
"coverup": "cat ./spec/coverage/lcov.info | codacy-coverage"
|
||||||
},
|
},
|
||||||
"pre-commit": [
|
"pre-commit": [
|
||||||
"cover"
|
"cover"
|
||||||
],
|
],
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"IPC",
|
"IPC",
|
||||||
|
|
|
@ -61,13 +61,11 @@ class IPC{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function log(){
|
function log(...args){
|
||||||
if(this.config.silent){
|
if(this.config.silent){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const args=Array.prototype.slice.call(arguments);
|
|
||||||
|
|
||||||
for(let i=0, count=args.length; i<count; i++){
|
for(let i=0, count=args.length; i<count; i++){
|
||||||
if(typeof args[i] != 'object'){
|
if(typeof args[i] != 'object'){
|
||||||
continue;
|
continue;
|
||||||
|
@ -111,9 +109,9 @@ function serve(path,callback){
|
||||||
}
|
}
|
||||||
if(!path){
|
if(!path){
|
||||||
this.log(
|
this.log(
|
||||||
'Server path not specified, so defaulting to'.notice,
|
'Server path not specified, so defaulting to',
|
||||||
'ipc.config.socketRoot + ipc.config.appspace + ipc.config.id'.variable,
|
'ipc.config.socketRoot + ipc.config.appspace + ipc.config.id',
|
||||||
(this.config.socketRoot+this.config.appspace+this.config.id).data
|
this.config.socketRoot+this.config.appspace+this.config.id
|
||||||
);
|
);
|
||||||
path=this.config.socketRoot+this.config.appspace+this.config.id;
|
path=this.config.socketRoot+this.config.appspace+this.config.id;
|
||||||
}
|
}
|
||||||
|
@ -153,9 +151,9 @@ function serveNet(host,port,UDPType,callback){
|
||||||
}
|
}
|
||||||
if(!host){
|
if(!host){
|
||||||
this.log(
|
this.log(
|
||||||
'Server host not specified, so defaulting to'.notice,
|
'Server host not specified, so defaulting to',
|
||||||
'ipc.config.networkHost'.variable,
|
'ipc.config.networkHost',
|
||||||
this.config.networkHost.data
|
this.config.networkHost
|
||||||
);
|
);
|
||||||
host=this.config.networkHost;
|
host=this.config.networkHost;
|
||||||
}
|
}
|
||||||
|
@ -178,8 +176,8 @@ function serveNet(host,port,UDPType,callback){
|
||||||
}
|
}
|
||||||
if(!port){
|
if(!port){
|
||||||
this.log(
|
this.log(
|
||||||
'Server port not specified, so defaulting to'.notice,
|
'Server port not specified, so defaulting to',
|
||||||
'ipc.config.networkPort'.variable,
|
'ipc.config.networkPort',
|
||||||
this.config.networkPort
|
this.config.networkPort
|
||||||
);
|
);
|
||||||
port=this.config.networkPort;
|
port=this.config.networkPort;
|
||||||
|
@ -227,16 +225,16 @@ function connect(id,path,callback){
|
||||||
|
|
||||||
if(!id){
|
if(!id){
|
||||||
this.log(
|
this.log(
|
||||||
'Service id required'.warn,
|
'Service id required',
|
||||||
'Requested service connection without specifying service id. Aborting connection attempt'.notice
|
'Requested service connection without specifying service id. Aborting connection attempt'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!path){
|
if(!path){
|
||||||
this.log(
|
this.log(
|
||||||
'Service path not specified, so defaulting to'.notice,
|
'Service path not specified, so defaulting to',
|
||||||
'ipc.config.socketRoot + ipc.config.appspace + id'.variable,
|
'ipc.config.socketRoot + ipc.config.appspace + id',
|
||||||
(this.config.socketRoot+this.config.appspace+id).data
|
(this.config.socketRoot+this.config.appspace+id).data
|
||||||
);
|
);
|
||||||
path=this.config.socketRoot+this.config.appspace+id;
|
path=this.config.socketRoot+this.config.appspace+id;
|
||||||
|
@ -245,9 +243,9 @@ function connect(id,path,callback){
|
||||||
if(this.of[id]){
|
if(this.of[id]){
|
||||||
if(!this.of[id].socket.destroyed){
|
if(!this.of[id].socket.destroyed){
|
||||||
this.log(
|
this.log(
|
||||||
'Already Connected to'.notice,
|
'Already Connected to',
|
||||||
id.variable,
|
id,
|
||||||
'- So executing success without connection'.notice
|
'- So executing success without connection'
|
||||||
);
|
);
|
||||||
callback();
|
callback();
|
||||||
return;
|
return;
|
||||||
|
@ -267,8 +265,8 @@ function connect(id,path,callback){
|
||||||
function connectNet(id,host,port,callback){
|
function connectNet(id,host,port,callback){
|
||||||
if(!id){
|
if(!id){
|
||||||
this.log(
|
this.log(
|
||||||
'Service id required'.warn,
|
'Service id required',
|
||||||
'Requested service connection without specifying service id. Aborting connection attempt'.notice
|
'Requested service connection without specifying service id. Aborting connection attempt'
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -284,9 +282,9 @@ function connectNet(id,host,port,callback){
|
||||||
}
|
}
|
||||||
if(!host){
|
if(!host){
|
||||||
this.log(
|
this.log(
|
||||||
'Server host not specified, so defaulting to'.notice,
|
'Server host not specified, so defaulting to',
|
||||||
'ipc.config.networkHost'.variable,
|
'ipc.config.networkHost',
|
||||||
this.config.networkHost.data
|
this.config.networkHost
|
||||||
);
|
);
|
||||||
host=this.config.networkHost;
|
host=this.config.networkHost;
|
||||||
}
|
}
|
||||||
|
@ -297,8 +295,8 @@ function connectNet(id,host,port,callback){
|
||||||
}
|
}
|
||||||
if(!port){
|
if(!port){
|
||||||
this.log(
|
this.log(
|
||||||
'Server port not specified, so defaulting to'.notice,
|
'Server port not specified, so defaulting to',
|
||||||
'ipc.config.networkPort'.variable,
|
'ipc.config.networkPort',
|
||||||
this.config.networkPort
|
this.config.networkPort
|
||||||
);
|
);
|
||||||
port=this.config.networkPort;
|
port=this.config.networkPort;
|
||||||
|
@ -314,10 +312,11 @@ function connectNet(id,host,port,callback){
|
||||||
|
|
||||||
if(this.of[id]){
|
if(this.of[id]){
|
||||||
if(!this.of[id].socket.destroyed){
|
if(!this.of[id].socket.destroyed){
|
||||||
|
|
||||||
this.log(
|
this.log(
|
||||||
'Already Connected to'.notice,
|
'Already Connected to',
|
||||||
id.variable,
|
id,
|
||||||
'- So executing success without connection'.notice
|
'- So executing success without connection'
|
||||||
);
|
);
|
||||||
callback();
|
callback();
|
||||||
return;
|
return;
|
||||||
|
|
Loading…
Reference in a new issue