Amr M. AbdulRahman
Amr M. AbdulRahman

Reputation: 1980

Create NodeJS standalone process

I'm working on something, using NodeJS, that's intended to run as a service that I can connect with.

Let's say I'm working on a Calculator npm module.

I will need to run it within my repo as following:

./node_modules/.bin/calculator start

And I want to keep it running forever, and i can connect it somehow (on port maybe?)

So, I can send/receive messages with the calculator using another node module, let's say 'calculator-connector', for example as following:

var calcConnector = require('calculator-connector'),
    calc = calcConnector.connect();

calc.add(1, 2);

Any idea how can achieve this design?

Upvotes: 1

Views: 282

Answers (2)

Gergo
Gergo

Reputation: 2290

To run calculator forever, you should use PM2 or Forever.

PM2 allows you to keep applications alive forever, to reload them without downtime and to facilitate common system admin tasks.

For connection, you could create a http or TCP server.

Upvotes: 1

Tomas Kulich
Tomas Kulich

Reputation: 15638

I'd make it like this:

Calculator by itself shouldn't be opinionated, where and when it will run. I'd just create it in the moment I need it:

var calculator = require('calculator');
calculator.listen('localhost', 8000); // create the service listening on port 8000
// create client capable of submitting the tasks
calcClient = createCalculatorClient('localhost', 8000) 
calcClient.add(1,2)

I believe that such setup is optimal for quick development and debugging.

When you'll need the things to be really separated (say, calculator itself will run on a separate server), you can do simple node script which'll run the calculator (basically, it's first 2 lines of the snippet above) and then create simple upstart job (in case of debianish server, or some alternative on other platforms), that'll keep the script alive.

PS: check out how express works, it's beautifully designed: http://expressjs.com/

read more about upstart: http://upstart.ubuntu.com/getting-started.html

Upvotes: 1

Related Questions