2013-10-10 15 views
7

Per favore qualcuno può aiutarmi a scoprire come ottenere il contesto del socket del server in node.js, in modo che venga a sapere che la richiesta è arrivata su quale numero di porta sul mio server. Posso leggere la porta del server se richiedo l'uso di intestazioni http, ma lo voglio attraverso la rete e qualcosa come il contesto socket che indica che è arrivata la richiesta su quale numero di porta.server DNS http.pento su più porte in esecuzione

Ecco il codice di esempio:

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

Ogni server HTTP può solo ascoltare una porta alla volta. Inoltre, questo è super facile da fare con Express. http://expressjs.com/api.html#app.listen – Brad

+0

Cosa intendi per contesto di rete/socket? senza ottenere richieste sul server. Il contesto socket – user568109

+0

indica l'intero oggetto di connessione sul socket in ascolto specifico. Volevo solo sapere su quale delle suddette richieste di porte arrivava sul server. –

risposta

5

L'oggetto req ha un riferimento alla presa nodo sottostante. È possibile ottenere facilmente queste informazioni come documentato a: http://nodejs.org/api/http.html#http_message_socket e http://nodejs.org/api/net.html#net_socket_remoteaddress

Ecco il codice di esempio modificato per mostrare le informazioni sull'indirizzo di socket locale e remoto.

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); 
});