2012-02-23 102 views
2

我有一個Windows服務器運行IIS和node.js與socket.io爲我正在開發的交互式白板應用程序。我希望IIS網站和node.js服務器都偵聽端口80,但綁定到不同的IP地址。socket.io綁定到特定的IP地址

從我能找到的,socket.io不具備指定IP地址的能力。這種限制可以通過創建一個http服務器實例來解決。我是socket.io和node.js的新手,並且試圖做到這一點有點遺憾。我將包含原始服務器代碼(在特定端口上偵聽)以及我嘗試在特定IP地址上實例化服務器。

原始

(function() { 
    var io; 
    io = require('socket.io').listen(80); 
    io.sockets.on('connection', function(socket) { 
    socket.on('drawClick', function(data) { 
     socket.broadcast.emit('draw', { 
     x: data.x, 
     y: data.y, 
     type: data.type 
     }); 
    }); 
    }); 
}).call(this); 

修改

(function() { 
    var host = "10.70.254.76"; 
var port = 80; 

var http = require("http").createServer(); 
var io = require("socket.io").listen(http); 

http.listen(port, host); 
io.sockets.on('connection', function(socket) { 
    socket.on('drawClick', function(data) { 
     socket.broadcast.emit('draw', { 
      x: data.x, 
      y: data.y, 
      type: data.type 
     }); 
    }); 
}); 
}).call(this); 

我得到錯誤:啓動修改後的代碼

+0

好吧,我的修改後的代碼工作,如果我設置端口爲8080.我得到EACCES錯誤,當我嘗試使用80 – TylerEKnight 2012-02-23 21:18:35

+0

端口80是禁止的因爲它屬於sudoers(root用戶),你可以使用「sudo node app.js」來強制它,但這不是好習慣。 – sfiore 2016-09-13 09:43:31

回答

0

我明白了!

該問題實際上與IIS和它的套接字池行爲有關。 IIS會自動爲所有IP地址保留端口80(即使它們當前未綁定到站點)。 我所要做的就是使用netsh命令覆蓋默認綁定並通過netsh命令綁定ip地址。

這就是我所做的。此解決方案適用於Windows Server 2008 R2中的IIS 7。

netsh http add iplisten ipaddress x.x.x.x 
net stop http 
net start http 
net start w3svc 

在我的情況下,我只有一個活動網站由IIS提供服務,只有一個IP綁定到它。這釋放了我的第二個IP地址,讓節點在它上面監聽端口80.

7

我看到沒人接聽時EACCES,所以我會後這個,不知道它會幫助你:

var io = require('socket.io'); 
var server = http.createServer(); 
server.listen(8080, 'localhost'); 
var socket = io.listen(server); 

基本上只是切換通話聽。

+0

這是一個權限錯誤,對吧?它是否工作,如果你把它作爲sudo運行?這不是推薦的解決方案。 – mindandmedia 2012-02-23 21:16:01

+0

這裏是一個類似的問題的鏈接:http://stackoverflow.com/questions/9164915/node-js-eacces-error-when-listening-on-most-ports – mindandmedia 2012-02-23 21:27:51

+0

嗯,我使用端口80時EACCES使用修改的方法,但在使用第一種方法(不綁定到特定IP的端口80)使用端口80時,不會出現任何錯誤。這是一個窗口框,並且該命令以管理員身份運行。 – TylerEKnight 2012-02-23 21:37:11

相關問題