2013-10-10 165 views
7

請任何人都可以幫助我瞭解如何獲取node.js中的服務器套接字上下文,以便我知道請求是在我服務器上的哪個端口號上發出的。 我可以讀取服務器端口,如果我請求使用http標頭,但我希望它通過網絡和類似的套接字上下文,告訴請求來自哪個端口號。在多個端口上運行node.js http服務器

下面是示例代碼:

var http=require('http'); 
var url = require('url'); 
var ports = [7006, 7007, 7008, 7009]; 
var servers = []; 
var s; 
function reqHandler(req, res) { 
     var serPort=req.headers.host.split(":"); 
     console.log("PORT:"+serPort[1]);//here i get it using http header. 
} 
ports.forEach(function(port) { 
    s = http.createServer(reqHandler); 
    s.listen(port); 
    servers.push(s); 
}); 
+2

每個HTTP服務器一次只能監聽一個端口。另外,這對於Express來說非常容易。 http://expressjs.com/api.html#app.listen – Brad

+0

網絡/套接字上下文是什麼意思?無需在服務器上獲取請求。 – user568109

+0

套接字上下文表示整個連接對象在特定的監聽套接字上。我只是想知道上面的哪個端口請求來自服務器。 –

回答

5

req對象具有到底層節點插座的參考。您可以輕鬆獲得此信息,如以下文件所述:http://nodejs.org/api/http.html#http_message_sockethttp://nodejs.org/api/net.html#net_socket_remoteaddress

這裏是您的示例代碼,修改後顯示本地和遠程套接字地址信息。

var http=require('http'); 
var ports = [7006, 7007, 7008, 7009]; 
var servers = []; 
var s; 
function reqHandler(req, res) { 
    console.log({ 
     remoteAddress: req.socket.remoteAddress, 
     remotePort: req.socket.remotePort, 
     localAddress: req.socket.localAddress, 
     localPort: req.socket.localPort, 
    }); 
} 
ports.forEach(function(port) { 
    s = http.createServer(reqHandler); 
    s.listen(port); 
    servers.push(s); 
}); 
相關問題