Nodejs検出ポートが占有されていますか?

2045 ワード

2016-04-11
Nodejs検出ポートが占有されていますか?
ローカルサービスをオープンした時、現在のポートはもう他の項目に使われました.サービスのオープンに失敗しました.次に、ポートが占有されているかどうかを簡単な10行コードで検出します.
考え方
ポートが占有されているかどうかを知りたいです.新しいサービスを開いて、ポートを待ち受けてもいいです.成功すれば、ポートが占有されていないということです.逆に、ポートは他のプログラムによって使われています.基本的な考え方ができました.コードの作成を始めます.
ベースコードportIsOccupied.js
var net = require('net')

//          
function portIsOccupied (port) {
  //           
  var server = net.createServer().listen(port)

  server.on('listening', function () { //               
    server.close() //     
    console.log('The port【' + port + '】 is available.') //        
  })

  server.on('error', function (err) {
    if (err.code === 'EADDRINUSE') { //        
      console.log('The port【' + port + '】 is occupied, please change other port.')
    }
  })
}

//   
portIsOccupied(1987)
テストnode portIsOccupied.jsを実行して、正常の場合はThe port【1987】 is available.を出力します.
ssrを使って現在のディレクトリを静的サーバに設定します.ssrの使用についてはここで見つけられます.https://github.com/jaywcjlove/ssrssrはデフォルトで1987ポートを開きます.
このとき、再度node portIsOccupied.jsを実行し、The port【1987】 is occupied, please change other port.を出力する.
プログラムをより完璧にする
ここまで、ポートが占有されているかどうかを検出することができました.しかし、もし私が他のポートを検出したいなら、毎回ファイルのポート番号を変更しなければならないので、かなり面倒です.もっと完璧な実現方法がありますか?もちろんあります
Nodejsには、process.argvという面白いものがあります.前の2つの値はそれぞれnodeプログラムの位置と現在実行されているファイルの位置です.不思議なことに、私達がプログラムを実行する時に、伝えられたパラメータはprocess.argvを通して得られます.このようなnode portIsOccupied.js -p 1987であれば、process.argv配列の末尾に−pおよび1987が追加される.原理が分かりました.もっと完璧なプログラムを作りましょう.
コンソールからプログラムへの参照
修正portIsOccupied(1987)は、
var port = 80 //     80  
if (process.argv[2] === '-p') {
  port = parseInt(process.argv[3])
}

portIsOccupied(port)
実行
node portIsOccupied.js -p [port]
その中の[port]はあなたが検出したいポートです.
私のブログ
私のブログでこの文章、住所をご覧ください.http://ansenhuang.github.io/