2013-10-10 24 views
7

Ai cũng có thể giúp tôi tìm hiểu cách lấy ngữ cảnh socket máy chủ trong node.js, để tôi biết yêu cầu đến số cổng nào trên máy chủ của tôi. Tôi có thể đọc cổng máy chủ nếu tôi yêu cầu sử dụng tiêu đề http nhưng tôi muốn nó thông qua mạng và một cái gì đó giống như bối cảnh socket cho biết yêu cầu đến trên số cổng nào.chạy máy chủ http node.js trên nhiều cổng

Đây là đoạn mã mẫu:

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

Mỗi máy chủ HTTP chỉ có thể nghe một cổng tại một thời điểm. Ngoài ra, đây là siêu dễ dàng để làm với Express. http://expressjs.com/api.html#app.listen – Brad

+0

Bạn có ý nghĩa gì với bối cảnh mạng/socket? mà không nhận được yêu cầu trên máy chủ. – user568109

+0

ngữ cảnh ổ cắm có nghĩa là toàn bộ đối tượng kết nối trên ổ cắm nghe cụ thể. Tôi chỉ muốn biết yêu cầu cổng nào ở trên đã xảy ra trên máy chủ. –

Trả lời

5

Đối tượng req có một tham chiếu đến các ổ cắm nút bên dưới. Bạn có thể dễ dàng nhận được thông tin này như được ghi tại: http://nodejs.org/api/http.html#http_message_sockethttp://nodejs.org/api/net.html#net_socket_remoteaddress

Đây là mã mẫu của bạn được sửa đổi để hiển thị thông tin địa chỉ ổ cắm cục bộ và từ xa.

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); 
}); 
Các vấn đề liên quan