我有一个运行IIS的Windows服务器和带有socket.io的node.js,用于我正在开发的交互式白板应用程序.我希望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);
Run Code Online (Sandbox Code Playgroud)
改性
(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);
Run Code Online (Sandbox Code Playgroud)
我得到错误:在启动修改后的代码时听EACCES
min*_*dia 10
我看到没有人接听,所以我会发布这个,不确定它是否会对你有所帮助:
var io = require('socket.io');
var server = http.createServer();
server.listen(8080, 'localhost');
var socket = io.listen(server);
Run Code Online (Sandbox Code Playgroud)
基本上只是将呼叫切换为监听.
我得到了它!
问题实际上在于 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
Run Code Online (Sandbox Code Playgroud)
就我而言,我只有一个由 IIS 提供服务的活动网站,并且只有一个 IP 与其绑定。这释放了我的辅助 IP 地址,供节点监听它和端口 80。
| 归档时间: |
|
| 查看次数: |
14884 次 |
| 最近记录: |