Kiểm tra các cổng mạng đang mở – Node.js

Node.js trở thành một công cụ có tốc độ phát triển đáng kinh ngạc cho việc tạo ra các services hoặc web server. Thông thường trong các ví dụ phổ thông của một ứng dụng Node.js, chúng ta sẽ dùng lệnh npm start, chờ chương trình khởi động, và bạn sẽ thấy ứng dụng hoạt động trên một địa chỉ mạng(thường là localhost) và một cổng (port).

Ví dụ: localhost:8080. Có một điều đáng lo ngại cho kiểu khởi tạo ứng dụng node như thế này nếu bạn có quá nhiều dịch vụ (viết bằng Node hoặc không) cùng hoạt động, khi bạn khởi động một ứng dụng Node có thể sẽ gặp lỗi “port in use”, sau đó bạn phải lựa chọn tắt dịch vụ đang sử dụng mà cổng bạn muốn dùng hoặc đổi sang cổng khác.

Thật may chúng ta có một giải pháp đơn giản cho vấn đề này: Node Port Scanner. Tiện ích này cung cấp nhiều phương thức cho phép ta liệt kê những cổng đang được sử dụng hoặc tìm ra những cổng chưa được sử dụng trên máy chủ của chúng ta.

Sử dụng Node Port Scanner

Đầu tiên chúng ta cần tải tiện ích này về:

npm install portscanner --save

Phương thức mà tôi thường dùng nhất để tránh trường hợp xung đột cổng là phương thức findAPortNotInUse:

var portscanner = require('portscanner');

// 127.0.0.1 là địa chỉ máy chủ mặc định; bạn có thể không cần truyền vào
portscanner.findAPortNotInUse([3000, 3010], '127.0.0.1').then(port => {
    console.log('Port' + port + ' is available!');

    // Tìm thấy một cổng có thể sử dụng trong dải từ [3000, 3010]. Sử dụng cổng này cho ứng dụng của bạn
    // Ví dụ: Web server bằng express
    // app.listen(port, function() {
    //    console.log('Example app listening on port + ' + port + '!')
    // })
});

Bạn cũng có thể kiểm tra trạng thái của một cổng hoặc kiểm tra các công đang được sử dụng:

// Lấy status của một cổng
portscanner.checkPortStatus(3000, '127.0.0.1').then(status => {
  // Nếu status là 'open' nghĩa là có một ứng dụng đang sử dụng cổng này, 'closed' là chưa có ứng dụng nào chạy trên cổng này.
  console.log(status);
});

// Tìm những cổng đã được sử dụng
portscanner.findAPortInUse([3000, 3005, 3006], '127.0.0.1').then(port => {
  console.log('PORT IN USE AT: ' + port);
});

Tiện ích Port scanner giúp việc cho tránh xung đột cổng cho các ứng dụng trở nên dễ dàng!

 

Từ khóa: