2013-10-10 11 views
7

Proszę, może ktoś mi pomóc, aby dowiedzieć się jak uzyskać kontekst gniazda serwera w pliku node.js, dzięki czemu dowiem się, jaki jest wniosek, który numer portu na moim serwerze. Mogę odczytać port serwera, jeśli zażądam korzystania z nagłówków HTTP, ale chcę go przez sieć i coś w rodzaju kontekstu gniazda, który mówi, że przychodzi żądanie, na którym porcie.działający serwer http.węzła.js na wielu portach

Oto Kod próbki:

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

Każdy serwer HTTP może słuchać tylko jednego portu na raz. Ponadto jest to bardzo łatwe do zrobienia dzięki Express. http://expressjs.com/api.html#app.listen – Brad

+0

Co masz na myśli przez kontekst sieci/gniazda? bez pobierania żądania na serwerze. – user568109

+0

kontekst gniazda oznacza cały obiekt połączeniowy na danym gnieździe nasłuchowym. Chciałem tylko wiedzieć, które z powyższych żądań portów pojawiły się na serwerze. –

Odpowiedz

5

Przedmiotem req ma odniesienie do podstawowej gniazda węzła. Możesz łatwo uzyskać te informacje zgodnie z dokumentacją: http://nodejs.org/api/http.html#http_message_socket i http://nodejs.org/api/net.html#net_socket_remoteaddress

Oto Twój przykładowy kod zmodyfikowany, aby pokazać lokalne i zdalne informacje o adresie gniazda.

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); 
}); 
Powiązane problemy