Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js socket.io绑定到特定ip地址_Node.js_Socket.io - Fatal编程技术网

Node.js socket.io绑定到特定ip地址

Node.js socket.io绑定到特定ip地址,node.js,socket.io,Node.js,Socket.io,我有一台运行IIS和node.js的windows服务器,其中包含socket.io,用于我正在开发的交互式白板应用程序。我希望IIS网站和node.js服务器都在端口80上侦听,但绑定到不同的IP地址 据我所知,socket.io无法指定ip地址。这个限制可以通过创建http服务器实例来克服。我不熟悉socket.io和node.js,尝试这么做有点迷茫。我将包括原始服务器代码(侦听特定端口)和尝试在特定IP地址上实例化服务器 原创的 (function() { var io; io

我有一台运行IIS和node.js的windows服务器,其中包含socket.io,用于我正在开发的交互式白板应用程序。我希望IIS网站和node.js服务器都在端口80上侦听,但绑定到不同的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);

我收到错误:在启动修改后的代码时,请仔细听每一条消息。我看到没有人回答,因此我将发布此消息,不确定它是否对您有帮助:

var io = require('socket.io');
var server = http.createServer();
server.listen(8080, 'localhost');
var socket = io.listen(server);
基本上只需切换通话收听。

我明白了

问题实际上在于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。

这是一个权限错误,对吗?如果你像sudo那样运行它,它能工作吗?这不是推荐的解决方案。这里有一个指向类似问题的链接:当我使用端口80和修改后的方法时,我得到了EACCES,但是当使用端口80和第一个方法(不绑定到特定IP的方法)时,我没有得到任何错误。这是一个windows框,该命令以管理员身份运行。没关系,我发现这实际上是IIS行为的问题。我在上面添加了我的解决方案。ämbi:我们可以添加多个IP地址吗。。我需要创建一个只能从一个IP地址访问的Web服务。。。我相信这可以作为一个很好的解决方案吗?好的,如果我将端口设置为8080,我修改的代码就可以工作。当我尝试使用80端口80时,我得到了EACCES错误,因为它属于sudoers(root用户),您可以使用“sudo node app.js”强制它,但这不是好的做法。