Node.js Socket.IO仅在本地工作

Node.js Socket.IO仅在本地工作,node.js,socket.io,Node.js,Socket.io,我有这个Node.JS服务器: var app = require('express')(); var server = app.listen(80); var io = require('socket.io').listen(server); var posx = 10; var posy = 10; app.get('/', function (req, res) { res.sendfile( __dirname + '/index.html' ); }); io.socket

我有这个Node.JS服务器

var app = require('express')();
var server = app.listen(80);
var io = require('socket.io').listen(server);
var posx = 10;
var posy = 10;

app.get('/', function (req, res) {
    res.sendfile( __dirname + '/index.html' );
});

io.sockets.on('connection', function (socket) {
    socket.emit('start', {
        x: posx,
        y: posy
    });

    socket.on('newpos', function (data) {
        posx = data["x"];
        posy = data["y"];
        socket.broadcast.emit('move', { x: posx, y: posy });
    });
});
客户端代码:

            var socket = io.connect('http://localhost');

            socket.on('start', function (data) {
                $("#pointer").animate({
                    'top': data["y"],
                    'left': data["x"]
                }, 0);
            });

            socket.on('move', function (data) {
                $("#pointer").animate({
                    'top': data["y"],
                    'left': data["x"]
                }, "slow");
            });

            $("#pointer").draggable({
                stop: function(event, ui) {
                    var pos = $("#pointer").position();

                    socket.emit('newpos', {
                        'x': pos.left,
                        'y': pos.top
                    });
                }
            });
问题是它似乎只在本地起作用。 在ubuntu chrome上,我得到:

XMLHttpRequest cannot load http://localhost/socket.io/1/?t=1344711676473. Origin http://192.168.1.130 is not allowed by Access-Control-Allow-Origin.
在mac电脑上,我对同一个文件有一个GET错误


你知道问题出在哪里吗?

将app.listen(80)改为app.listen(80,'192.168.1.130')这样,你从socket.io发来的URL应该是正确的。即使您在本地计算机上尝试,也要确保从浏览器中的192.168.1.130访问它。

站点的域与它的宿主位置无关,它与您访问它所使用的URL有关

即使“192.168.1.130”和“localhost”解析为同一台服务器,它们也被视为不同的域

因此,由于您有客户端代码:

var socket = io.connect('http://localhost');
您正在连接到域localhost。如果客户端代码是由localhost提供的,您就可以了,但是如果您是从另一个域(例如192.168.1.130)加载客户端,那么您将面临问题。从浏览器和服务器的角度来看,您很容易成为试图访问该服务的陌生人

要解决此问题,请将客户端套接字创建更改为:

var socket=io.connect('192.168.1.130')

你应该解决你的问题

但实际上,您应该完全删除该参数并尝试运行:

var socket=io.connect()


这样,它将默认为您所基于的任何域,并且它将在本地主机、IP以及最终使用的域名上工作。

不走运。。还是一样的错误。此外,我认为将本地IP设置为本地IP不是一个好主意,因为我希望我的服务器可以从内部网外部访问。您的客户端代码是什么?哦,天哪。。。太蠢了!!!完全忘记了。。。我的问题值得一提。不,这是一个容易犯的错误!这个问题将帮助其他面临类似问题的人;你会怎么做?同意,很容易犯错误。在Socket.io1.x上,我只需要使用:
var Socket=io()不需要.connect();我很高兴你没有删除这个,非常方便,现在我可能永远不会忘记它