NetPool是一个为NodeJS开发的用于建立TCP长连接的模块,为NodeJS开发基于TCP服务的客户端提供了更为方便的连接管理方式。
目前NetPool提供了如下的功能:
1. 链接重连,服务器短暂(在链接超时的限制之内)重启后,链接池重新链接。
2. 没有链接时,如果允许等待,则将callback放入等待队列,待有链接释放的时候, 从队列中获取callback,执行。
3. 剔除出错链接(不可读写的文件句柄),这个特性对于半关闭的链接是不适用。
4. 在使用达到一定次数后,废弃链接,创建新链接。
NetPool是开源软件,代码在:http://search./#/netpool
使用起来非常简单,首先让我们来初始化一个链接池:
* {
* port : ‘链接的端口’
* host : ‘链接的host’
* minsize : ‘最小链接数’,
* maxsize : ‘最大连接数’,
* timeout : ‘链接超时时间(s)’,
* errback : ‘出错的callback’,
* callback : ‘初始化完成后的callback’,
* reuse : ‘使用次数’
* }
真实的使用:
var poolmodule = require(‘pool’);
var carrier = require(‘carrier’);
var dispatch_pool_config = {port : global.dispatch_config.dispatchport, host : global.dispatch_config.dispatchhost, minsize : global.dispatch_config.minsize, maxsize : global.dispatch_config.maxsize, callback : router};
global.dispatch_pool = poolmodule.pool(dispatch_pool_config);
// 从池中抓取一个链接出来.
global.dispatch_pool.get_connection(function(connect){
var my_carrier = carrier.carry(connect);
my_carrier.on(‘line’, function callback(line){
// do sth. you like
// 每次用完要释放链接.才能使得其它的 请求得到链接.
global.dispatch_pool.release(connect);
}
});
在模块中自带了一个测试脚本。
[root@alvayang node_netpool (master) #8]# tree test/
test/
├── bench.js
├── carrier.js
└── roster.js
其中:
carrier.js: 为了方便数据管理引入的第三方的模块(https://github.com/pgte /carrier)。
bench.js: 模拟客户端请求。
roster.js: echo server。
运行截图如下图所示:

通过截图我们可以看到在右侧的服务器断开重启之后,客户端和服务器端的 链接又重新建立了起来。这样,即时服务端有短暂的重启,对客户端的 逻辑来说,也 是不受影响的。