Socket.io'无法连接'。不同域/端口上的客户端

时间:2012-03-08 19:05:15

标签: node.js websocket socket.io

我无法连接到socket.io,而客户端位于同一台计算机上的不同端口上。

客户端是在Apache(端口80)上运行的站点的一部分,Nodejs正在8585上运行。

知道我在这里做错了吗?

在客户端,我得到了“无法连接Socket.IO'消息,没有理由。

服务器

var express       = require('express'),
    connect       = require('connect'),
    RedisStore    = require('connect-redis')(express),
    io            = require('socket.io').listen(app),
    routes        = require('./routes'),
    request       = require('request');

var app = module.exports = express.createServer();

// Configuration
app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.session({ secret: "secret", store: new RedisStore}));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

io.set('authorization', function(handshakeData, callback) {
    console.log('authorization');
    callback(null, true);
});

//Socket IO connection
io.sockets.on('connection', function (socket) {
    var session = socket.handshake.session;
    console.log(session);
});

app.listen(8585);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

客户端:(从apache和不同域上的站点运行,但是服务器相同)。

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

    sio.socket.on('error', function (reason){
        console.error('Unable to connect Socket.IO', reason);
    });

    sio.on('connect', function (){
        console.error('successfully established a working connection \o/');
    });

谢谢!

1 个答案:

答案 0 :(得分:0)

除非您在与服务器相同的计算机上运行浏览器,否则代码中的“localhost”将指向运行浏览器的计算机,而不是服务器。 localhost的DNS查找始终解析为执行查找的计算机。即使您在与服务器相同的计算机上访问该站点,除非您将其作为“localhost”访问,否则浏览器的安全策略将阻止您与localhost通信。