如何使用nodejs从服务名称获取端口号

时间:2018-03-23 10:24:23

标签: javascript node.js

我们正在使用带有socket.io

的Nodejs开发一个WebSocket服务器

我使用了类HTTP中的createServer方法,然后按如下方式侦听端口:

var server = http.createServer();
  server.listen(port, function () {
  ...
}

现在问题是我只有服务名称 并且听取服务不起作用:

var server = http.createServer();
  server.listen(service, function () {
  ...
}

所以我需要读取并解析文件/ etc / services以获取与服务关联的端口,如下所示:

var str = fs.readFileSync(filename).toString();
var serviceline = str.match( port+".*tcp" );
var port = serviceline[0].match( "[0-9]+" )

是否有更简单的方法从服务获取端口?

提前致谢

让 -

2 个答案:

答案 0 :(得分:1)

您可以使用find-process从流程中查找端口,反之亦然

命令行用法

npm install find-process -g

Usage: find-process [options] <keyword>


Options:

    -V, --version      output the version number
    -t, --type <type>  find process by keyword type (pid|port|name)
    -p, --port         find process by port
    -h, --help         output usage information

Examples:

    $ find-process node          # find by name "node"
    $ find-process 111           # find by pid "111"
    $ find-process -p 80         # find by port "80"
    $ find-process -t port 80    # find by port "80"

代码使用

npm install find-process --save

const find = require('find-process');

find('pid', 12345)
  .then(function (list) {
    console.log(list);
  }, function (err) {
    console.log(err.stack || err);
  })

我用它来从端口查找进程,但我认为它提供了一种相反的方式,或者你可以浏览它的repo并选择你需要的代码。

答案 1 :(得分:0)

我不需要服务器端口,但是对应于服务名称的端口为 例如,有以下服务&#34; wsgw&#34;在文件/ etc / services

中指定
wsgw      8001/tcp               # websocket gateway

在运行服务器以这种方式监听此端口之前,我需要获取值8001:

var server = http.createServer();
server.listen(8001, function () {
...

听取以下服务并不起作用:

var server = http.createServer();
server.listen("wsgw", function () {
...

注意:从流程中查找端口对我没有帮助,因为它不是流程而是服务