操作系統分配端口號。請參閱https://github.com/joyent/node/blob/v0.6.11/lib/net.js#L780-783
在OS X上,分配是順序的,userland,並且不檢查端口以驗證端口未被使用。
在Ubuntu 11.04上,這個任務是隨機的,userland,也不檢查端口是否在使用中。
下面的腳本可以用於在其他平臺上測試。要驗證端口是userland,我通過bash管理腳本10,000次,以零匹配傳輸到grep -c「port:[0-9] {1,3}」。
var net = require('net'),
firstPort;
(function createServer(port) {
var server = net.createServer();
server.listen(port, function() {
address = server.address();
if (port === 0) {
if (firstPort === undefined) {
firstPort = address.port;
// cause a EADDRINUSE in 10 more sockets for sequential platforms
// without this, will run out of fd's before hitting EADDRINUSE
createServer(firstPort + 10);
console.log('addr in use port trap: ', firstPort + 10);
} else {
// on OS X (sequential) this will increment the OS's sequential counter
// and not cause EADDRINUSE
createServer(address.port + 1);
}
createServer(0);
}
console.log("requested port:", port, " binded port:",address.port);
});
})(0);
我認爲它只是分配一個隨機端口,但我不是100%。我想你需要做的錯誤和增量等...就像在鏈接(他們重試與相同的端口雖然) – bryanmac 2012-03-28 05:18:51
但是,你必須想知道什麼意思啓動一些隨機可用的端口 - 除非你有某種類型的服務發現,其他人和客戶很難發現你隨機發現的東西:) – bryanmac 2012-03-28 05:20:39
這通常不是一個問題,因爲您同意某個端口或使用知名端口。如果您沒有綁定所述端口的權限,那麼您還有其他問題需要解決。 – 2012-03-28 08:41:23