Выбирает ли Node.js порт, который не используется?
Да, порт будет доступным. операционная система выбирает порт, который не используется, а не Node.js, но с точки зрения конечного пользователя это более или менее то же самое.
Документация, без сомнения, имела другую формулировку в то время, когда этот вопрос был первоначально опубликован в 2012 году, но на данный момент (январь 2019 года), явно говорит об этом : "Если порт не указан или равен 0 , операционная система назначит произвольный неиспользуемый порт ... ".
Должен ли я сам это проверить и повторить попытку, если Node.js выберет порт, который уже открыт и привязан к другому приложению?
Нет, нет. Вы должны обрабатывать ошибки в любом случае, так как любое количество вещей может пойти не так. Но написание дополнительного кода для проверки доступности порта - это не то, что вам нужно.
Он выбирает какой-либо старый порт или только порты пользователя (> 1024)?
Насколько я знаю, это всегда будет непривилегированный порт.
Для операционных систем, таких как macOS, которые назначают доступные порты последовательно, вот код, который показывает, что операционная система пропустит порт, если он недоступен.
// Testing for macOS, which supplies available ports sequentially.
var net = require('net');
createServer(0, function () {
var port = this.address().port;
console.log('server was assigned port ' + port);
createServer(port+1, function () {
var port = this.address().port;
console.log('server was assigned port ' + port);
createServer(0, function () {
var port = this.address().port;
// This line will show that the OS skipped the occupied port and assigned the next available port.
console.log('server was assigned port ' + port);
});
});
});
function createServer(port, callback) {
console.log('create server with port ' + port);
var server = net.createServer();
server.listen(port, callback).unref();
}