这里有新鲜出炉的 7 天学会 Node.js,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
大家有没有遇到过在开启本地服务时,有这么一种情况:当前端口已经被另一个项目使用了,导致服务开启失败。那么接下来,我们通过简简单单的示例代码来检测端口是否已经被占用。有需要的朋友们可以参考借鉴。
前言
在网络技术中,端口 (Port) 大致有两种意思:一是物理意义上的端口,比如,ADSL Modem、集线器、交换机、路由器用于连接其他网络设备的接口,如 RJ-45 端口、SC 端口等等。二是逻辑意义上的端口,一般是指 TCP/IP 协议中的 端口,端口号的范围从 0 到 65535,比如用于浏览网页服务。这篇文章的目的是为了解决 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)
- }
- })
- }
总结
以上就是这篇文章的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0510/331496.html