我有以下代码在本地网络上运行时运行没有问题,我在同一网络上连接的朋友可以连接到我的系统的ip(192.168.0.107),但是如何制作这个socket.io服务器代码监听我从isp提供者那里得到的静态ip,所以任何地方的任何人都可以通过互联网连接到这个socket.io服务器。
服务器代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
app.get('/', function(req, res) {
res.sendfile('index.html');
});
users = [];
io.on('connection', function(socket) {
console.log('A user connected');
socket.on('setUsername', function(data) {
console.log(data);
if(users.indexOf(data) > -1) {
socket.emit('userExists', data + ' username is taken! Try some
} else {
users.push(data);
socket.emit('userSet', {username: data});
}
});
socket.on('msg', function(data) {
//Send message to everyone
io.sockets.emit('newmsg', data);
})
});
http.listen(3000, function() {
console.log('listening on localhost:3000');
});
答案 0 :(得分:1)
您可以根据documentation更新对http.listen
的来电,以明确收听对指定地址的请求:
http.listen(3000, 192.168.0.107, function() {
console.log('listening on localhost:3000');
});
但是默认是允许的(接受对任何主机的请求),因此如果由于防火墙/ NAT问题而无法连接它。来自文档:
如果省略host,服务器将在IPv6可用时接受未指定的IPv6地址(::)上的连接,否则接受未指定的IPv4地址(0.0.0.0)。
您需要将路由器配置为将您要提供的任何端口(通常是端口80)上的请求转发到本地IP。对于SuperUser或ServerFault站点来说,这将是一个更大的问题。