Package Exports
- pm
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (pm) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
About
pm
是一个轻量级的Node.js多进程管理器,基于之前的node-cluster
重构而来,在淘宝内部的生产系统中得到了广泛的应用.
- 基于 master + worker 模式,master负责进程管理,worker 处理业务逻辑,有效利用现代服务器的多CPU;
- 同一 master 可管理多种类型的worker, 并且支持在不同类型的 worker 之间进行轻量的消息传递;
- 同一类型的 worker ,对于TCP请求,采用抢占式的方式进行负载均衡;
- 平滑退出和 不退出前提下的 worker 进程重载 (reload).
Api
- Visit the wiki page to get more infomation about
pm
. - Also, we supply demo scripts in the code directory demo.
Install
$ npm install pm
Benchmark
$ siege -b -c100 -t 60S http://172.0.0.2:33749/
- QPS (only one child, http server, response req.url) (node0.6.17):
CASE | Closed | KeepAlive |
---|---|---|
pm2.0 | 5600 | 10553 |
pm1.0 | 5231 | 10388 |
node | 5481 | 10126 |
Usage
- in
master.js
, run as master:
var app = require('pm').createMaster({
'pidfile' : '/tmp/demo.pid',
});
app.register('group1', __dirname + '/http.js', {
'listen' : [8080, 8081],
'addr': '127.0.0.1' // it uses '0.0.0.0' by default
});
app.on('giveup', function (name, num, pause) {
// YOU SHOULD ALERT HERE!
});
app.dispatch();
- in
http.js
, run as worker:
var http = require('http').createServer(function (req, res) {
res.end('hello world');
});
require('pm').createWorker().ready(function (socket, port) {
http.emit('connection', socket);
});
Contributors
Thanks goes to the people who have contributed code to this module, see the GitHub Contributors page.
Below is the output from git-summary
project: pm
commits: 91
files : 27
authors:
86 aleafs 94.5%
4 wanglang 4.4%
1 fengmk2 1.1%
License
pm
is published under MIT license.
See license text in LICENSE file.