Skip to content

Commit

Permalink
intermediate commit booksbyus#1
Browse files Browse the repository at this point in the history
Signed-off-by: Octavian Ionescu <itavyg@gmail.com>
  • Loading branch information
itavy committed Feb 24, 2015
1 parent 3d67aa3 commit 7481f64
Show file tree
Hide file tree
Showing 5 changed files with 302 additions and 0 deletions.
14 changes: 14 additions & 0 deletions examples/Node.js/dev/debug/mtserverClientTest.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
'use strict';
var requester,
zmq = require('zmq');

requester = zmq.socket('req');
requester.connect('tcp://127.0.0.1:5555');
// requester.connect('ipc://../clients.ipc');

requester.on('message', function (msg) {
console.log(new Date(), 'received: ', msg.toString());
requester.close();
});

requester.send('Hello');
20 changes: 20 additions & 0 deletions examples/Node.js/dev/msgqueue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
/*
* @fileoverview Simple message queuing broker
* Same as request-reply broker but using QUEUE device
* @author Octavian Ionescu <itavyg(at)gmail(dot)com>
*/
'use strict';
var frontend, backend,
zmq = require('zmq');

frontend = zmq.socket('router');
frontend.bind('tcp://localhost:5559');
backend = zmq.socket('dealer');
backend.bind('tcp://localhost:5560');

zmq.proxy(frontend, backend);

process.on('SIGINT', function () {
frontend.close();
backend.close();
});
75 changes: 75 additions & 0 deletions examples/Node.js/dev/mtrelay.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* @fileoverview Multithreaded Hello World server. it uses
* cluster module since nodejs is singlethreaded
* @author Octavian Ionescu <itavyg(at)gmail(dot)com>
*/
'use strict';
var c, cleanExit, k, sender, receiver,
startedWorkers = 0,
zmq = require('zmq'),
cluster = require('cluster');

cleanExit = function () {
if (0 === startedWorkers) {
// no more workers
receiver.close();
}
};

if (cluster.isMaster) {
receiver = zmq.socket('pair');
receiver.bind('ipc://step3.ipc');
receiver.on('message', function (/*msg*/) {
console.log('Test successfull!');
});

cluster.on('fork', function (worker) {
// send message to child to know which step to simulate
// 1 it is in the middle
// 2 it is at the end and must send message
worker.send(++startedWorkers);
});

cluster.on('exit', function (/*worker, code, signal*/) {
startedWorkers -= 1;
cleanExit();
});

for (k = 0; 2 > k; k += 1) {
cluster.fork();
}
} else {
process.on('message', function (processMsg) {
if (1 === processMsg) {
receiver = zmq.socket('pair');
receiver.bind('ipc://step2.ipc');
sender = zmq.socket('pair');
sender.connect('ipc://step3.ipc');
receiver.on('message', function (msg) {
sender.send(msg);
});
} else {
sender = zmq.socket('pair');
sender.connect('ipc://step2.ipc');
sender.send('');
}
});
}

process.on('SIGINT', function () {
if (cluster.isMaster) {
for (c in cluster.workers) {
if ({}.hasOwnProperty.call(cluster.workers, c)) {
cluster.workers[c].kill('SIGINT');
}
}
cleanExit();
} else {
if (receiver) {
receiver.close();
}
if (sender) {
sender.close();
}
}
});
79 changes: 79 additions & 0 deletions examples/Node.js/dev/mtserver.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
/*
* @fileoverview Multithreaded Hello World server. it uses
* cluster module since nodejs is singlethreaded
* @author Octavian Ionescu <itavyg(at)gmail(dot)com>
*/
'use strict';
var clients, workers, k, setupProxy, receiver,
c, cleanExit,
startedWorkers = 0,
zmq = require('zmq'),
cluster = require('cluster');


cleanExit = function () {
if (0 === startedWorkers) {
// no more workers
workers.close();
}
};

setupProxy = function () {
clients = zmq.socket('router');
clients.bind('tcp://127.0.0.1:5555');

workers = zmq.socket('dealer');
workers.bind('ipc://workers.ipc');

zmq.proxy(clients, workers);
};

if (cluster.isMaster) {
// start forking after we setup the proxy
(function () {

for (k = 0; 5 > k; k += 1) {
cluster.fork();
}

cluster.on('fork', function (/*worker*/) {
startedWorkers += 1;
});

cluster.on('exit', function (/*worker, code, signal*/) {
startedWorkers -= 1;
cleanExit();
});

}(setupProxy()));
} else {

receiver = zmq.socket('rep');
receiver.connect('ipc://workers.ipc');

receiver.on('message', function (msg) {
console.log('Received request: ', msg.toString());
// simulate some work and send reply after 1s

setTimeout(function () {
receiver.send('World');
}, 1000);

});

}

process.on('SIGINT', function () {
if (cluster.isMaster) {
// stop accepting new requests
clients.close();
for (c in cluster.workers) {
if ({}.hasOwnProperty.call(cluster.workers, c)) {
cluster.workers[c].kill('SIGINT');
}
}
cleanExit();
} else {
receiver.close();
}
});
114 changes: 114 additions & 0 deletions examples/Node.js/dev/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
{
"name": "zmq-node-examples",
"description": "Examples for zmq guide",
"version": "0.0.1",
"contributors": [
"Octavian Ionescu <itavyg@gmail.com> (https://github.com/itavy)"
],
"dependencies": {
"zmq": "2.10.0"
},
"jshintConfig": {
"curly": false,
"eqeqeq": true,
"immed": true,
"newcap": true,
"noarg": true,
"sub": true,
"undef": true,
"unused": true,
"boss": true,
"eqnull": true,
"node": true,
"strict": true,
"white": true,
"nonbsp": true,
"browser": true,
"mocha": true,
"indent": 2,
"latedef": true,
"immed": true,
"shadow": false
},
"jscsConfig": {
"disallowTrailingWhitespace": true,
"validateIndentation": 2,
"validateParameterSeparator": ", ",
"validateQuoteMarks": {
"mark": "'",
"escape": true
},
"disallowEmptyBlocks": true,
"disallowMixedSpacesAndTabs": true,
"disallowMultipleLineStrings": true,
"disallowSpaceAfterObjectKeys": true,
"disallowSpaceAfterPrefixUnaryOperators": true,
"disallowSpaceBeforePostfixUnaryOperators": true,
"disallowSpacesInCallExpression": true,
"disallowTrailingComma": true,
"requireDotNotation": "except_snake_case",
"requireLineBreakAfterVariableAssignment": true,
"requireMultipleVarDecl": "onevar",
"requireSpaceAfterBinaryOperators": true,
"requireSpaceAfterKeywords": true,
"requireSpaceBeforeBinaryOperators": true,
"requireSpaceBeforeBlockStatements": true,
"requireSpaceBetweenArguments": true,
"requireSpacesInNamedFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"requireSpacesInFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"requireSpacesInAnonymousFunctionExpression": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"requireSpacesInFunctionDeclaration": {
"beforeOpeningRoundBrace": true,
"beforeOpeningCurlyBrace": true
},
"requireBlocksOnNewline": true,
"requireCurlyBraces": [
"if",
"else",
"for",
"while",
"do",
"try",
"catch"
]
},
"eslintConfig": {
"env": {
"node": true,
"mocha": true
},
"rules": {
"quotes": [1, "single"],
"no-mixed-requires": [0, false],
"no-underscore-dangle": [0, false],
"yoda": [1, "always"],
"indent": [2, 2],
"brace-style": [2, "1tbs"],
"comma-style": [2, "last"],
"default-case": 2,
"func-style": [2, "declaration"],
"guard-for-in": 2,
"no-floating-decimal": 2,
"no-nested-ternary": 2,
"no-undefined": 2,
"radix": 2,
"space-after-function-name": [1, "always"],
"space-after-keywords": [2, "always"],
"space-before-blocks": 2,
"spaced-line-comment": [2, "always", { "exceptions": ["-"]}],
"strict": [2, "global"],
"wrap-iife": 2,
"camelcase": false,
"new-cap": false
}
}
}

0 comments on commit 7481f64

Please sign in to comment.