当前位置: 首页 > 面试题库 >

Socket.IO仅在本地工作

东弘扬
2023-03-14
问题内容

我有这个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错误…

对可能是什么问题有任何想法吗?


问题答案:

网站的域名与托管位置无关,而与您用来访问它的URL有关。

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

结果,因为您具有客户端代码:

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

您正在连接到
localhost。如果客户端代码是由本地主机提供的,则很好,但是如果要从另一个域(例如192.168.1.130)加载客户端,则会遇到问题。从浏览器和服务器的角度来看,您很容易成为尝试访问该服务的完全陌生人。

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

var socket = io.connect('192.168.1.130');

您应该已经解决了问题。

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

var socket = io.connect();

这样,它将默认为您所基于的任何域,并且将在localhost,IP以及最终使用的域名上都可以使用。



 类似资料:
  • IIS可能会搞砸它?我倾向于认为IIS对于和)有不同的进程,因此,我在app.post上引用的套接字与我在()中加入用户是不同的。 在Azure/IIS中使用socket.io房间时有什么提示吗?谢了!

  • 我在服务器中有这个.js 在我的客户中(反应) 在我的督促下,我做了这项检查 为什么会这样呢?我不认为这是cors的问题,因为我已经做了 我的package.json

  • 下面的代码摘自rabbitmq教程(http://www.rabbitmq.com/tutorials/tutorial-one-python.html) 它可以工作,但如果我用自己的计算机或同一网络中的计算机的ip更改localhost: 我不知道为什么,我应该在连接中改变一些东西吗?

  • 有人有使用PHPWord的经验吗?我使用Composer安装了它,就像我对许多其他模块所做的一样,但是当我运行“基本用法”示例时,什么都没有发生。(autoloader.php工作正常)。 如果我更改

  • 我正在使用PHP*TCPDF/FPDI类动态生成PDF。。 虽然本地发展(WAMP/localhost)... 现在我已经把东西上传到了直播服务器上。。我在同一个文件上只得到一张空白页。。使用相同的目录结构。。 但是,在实时环境中进行测试时。。它不起作用? 只是一个空白页,没有错误...等等。 这是我目前使用的代码。。 (我试图在构造函数和超文本标记语言输出中添加UTF-8编码...?? 代码:

  • 问题内容: 我正在使用socket.io,并且安装迅速(这要归功于其用法页面上的示例),但我想了解有关幕后到底发生了什么以及使它起作用的技术的更多信息。 socket.io的确切机制是什么? 是在端口80上还是在另一个端口上? 它真的保持打开状态还是被模拟了? 有没有一种方法可以分析每个套接字事件?(有点像使用提琴手来查看ajax调用中会发生什么) 问题答案: 为了进行调试,您可能需要尝试 The