2015-04-25 21 views
5

Tôi sẽ rất cụ thể ở đây với hy vọng rằng những người hiểu điều này có thể chỉnh sửa để nói lại tình hình chung.Trong nodejs, làm cách nào để kiểm tra xem cổng đang nghe hoặc đang sử dụng

Hiện tại khi bạn chạy "gỡ lỗi nút", nó sinh ra một quá trình để nghe trên cổng 5858. Sau đó, trong phụ huynh, một kết nối được cố gắng vào cổng đó.

Tuy nhiên nếu bạn có phiên "gỡ lỗi nút" khác đang chạy, hiện tại "gỡ lỗi nút" bị treo vì cổng đó đang được sử dụng.

Cụ thông điệp mà bạn thấy là:

$ node debug example/gcd.js 3 5 
< debugger listening on port 5858 > 
connecting... 

Better sẽ cho nó để phát hiện rằng các cổng được sử dụng (không có kết nối với nó mà có thể mess lên ứng dụng khách khác đang cố gắng để kết nối mà hiện trình gỡ rối).

Chỉnh sửa: Giải pháp được chấp nhận bây giờ là trepanjs.

cũng Node JS - How Can You Tell If A Socket Is Already Open With The Einaros WS Socket Module?

+0

Bạn có thể thử và lắng nghe trên cổng và xem liệu bạn có gặp lỗi 'EADDRINUSE' hay không. – robertklep

+0

@robertklep trong khi điều này là đúng ý tưởng, tôi đã tìm kiếm mã cụ thể. – rocky

Trả lời

8

Một biến thể sau đây là những gì tôi đã sử dụng:

var net = require('net'); 
 

 
var portInUse = function(port, callback) { 
 
    var server = net.createServer(function(socket) { 
 
\t socket.write('Echo server\r\n'); 
 
\t socket.pipe(socket); 
 
    }); 
 

 
    server.listen(port, '127.0.0.1'); 
 
    server.on('error', function (e) { 
 
\t callback(true); 
 
    }); 
 
    server.on('listening', function (e) { 
 
\t server.close(); 
 
\t callback(false); 
 
    }); 
 
}; 
 

 
portInUse(5858, function(returnValue) { 
 
    console.log(returnValue); 
 
});

Các thực tế cam kết đó là tham gia nhiều hơn một chút là https://github.com/rocky/trepanjs/commit/f219410d72aba8cd4e91f31fea92a5a09c1d78f8

2

See You sẽ có thể sử dụng để phát hiện node-netstat module cổng đang được lắng nghe. Thật không may, có vẻ như nó chỉ hỗ trợ Windows và Linux, như vậy. Tuy nhiên, những thay đổi sẽ được yêu cầu để có nó hỗ trợ OS X không nhìn được terribly lớn. CẬP NHẬT: Hiện tại, nó hỗ trợ OS X ... er macOS ... er bất cứ điều gì họ đang gọi ngay bây giờ.

+0

Cảm ơn bạn đã cắm phích cắm. Tôi là tác giả của 'node-netstat' và chỉ muốn đề cập rằng nó có hỗ trợ OS X. – doogle

+1

Cảm ơn thông tin. Tôi đã cập nhật câu trả lời. – Trott

Các vấn đề liên quan