发布于 2015-12-17 13:26:04 | 343 次阅读 | 评论: 0 | 来源: PHPERZ
Node.js 服务器端的JavaScript
Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用· Node.js 借助事件驱动, 非阻塞I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
为了解决 ssr 工具 起多个服务的时候端口被占用的情况。分享研究的代码片段。
// 检测port是否被占用
function probe(port, callback) {
var server = net.createServer().listen(port)
var calledOnce = false
var timeoutRef = setTimeout(function () {
calledOnce = true
callback(false,port)
}, 2000)
timeoutRef.unref()
var connected = false
server.on('listening', function() {
clearTimeout(timeoutRef)
if (server)
server.close()
if (!calledOnce) {
calledOnce = true
callback(true,port)
}
})
server.on('error', function(err) {
clearTimeout(timeoutRef)
var result = true
if (err.code === 'EADDRINUSE')
result = false
if (!calledOnce) {
calledOnce = true
callback(result,port)
}
})
}
使用例子:
function server(_port){
var pt = _port || __port;
probe(pt,function(bl,_pt){
// 端口被占用 bl 返回false
// _pt:传入的端口号
if(bl === true){
// ssr(_pt)
server = http.createServer(connListener);
server = server.listen(parseInt(_pt, 10));
console.log("\n Static file server running at" + "\n\n=> http://localhost:" + _pt + '\n');
}else{
server(_pt+1)
}
})
}