Socket.io «Не удается подключиться». Клиент на другом домене / порту - PullRequest
1 голос
/ 08 марта 2012

У меня проблемы с подключением к 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 голосов
/ 08 марта 2012

Если вы не используете браузер на том же компьютере, что и сервер, «localhost» в вашем коде будет ссылаться на компьютер с браузером, а не на сервер. DNS-запросы для localhost всегда разрешают компьютеру, выполняющему поиск. И даже если вы заходите на сайт на том же компьютере, что и сервер, если вы не используете его как «localhost», политики безопасности браузера не позволят вам общаться с localhost.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...