2013-10-10 2 views
7

Пожалуйста, кто-нибудь поможет мне узнать, как получить контекст сокета сервера в node.js, чтобы я узнал, что запрос пришел на номер порта на моем сервере. Я могу прочитать порт сервера, если я запрашиваю использование заголовков http, но я хочу, чтобы он через сеть, и что-то вроде контекста сокета, который сообщает запрос о том, какой номер порта.running 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

Что вы подразумеваете под контентом network/socket? без получения запроса на сервере. – user568109

+0

контекст сокета означает весь объект соединения на конкретном прослушиваемом сокете. Мне просто хотелось узнать, какой из указанных выше запросов на порты пришел на сервер. –

ответ

5

Объект req имеет ссылку на гнездо базового узла. Вы можете легко получить эту информацию задокументированной по адресу: http://nodejs.org/api/http.html#http_message_socket и http://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); 
}); 
Смежные вопросы