2012-03-08 22 views
1

同じマシン上の別のポートにあるクライアントでsocket.ioに接続する際に問題があります。Socket.io '接続できません'。別のドメイン/ポート上のクライアント

クライアントは、私がここで間違ってやっているのApache上で動作するサイト(ポート80)とNodejsは8585.

任意のアイデア上で実行されているの一部ですか?

クライアント側では、「Unable to connect 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/'); 
    }); 

ありがとうございます!

答えて

0

サーバーと同じコンピュータでブラウザを実行している場合を除き、コード内の「localhost」は、サーバーではなくブラウザを実行しているコンピュータを指します。 localhostのDNSルックアップは、常にルックアップを実行するコンピュータに解決されます。また、サーバーと同じコンピュータ上のサイトにアクセスしている場合でも、「localhost」としてアクセスしない限り、ブラウザのセキュリティポリシーによってlocalhostとの通信が妨げられます。

+0

ああ、私はそれをIPに変更しました。あなたが言ったように、私が得るブラウザでは、Access-Control-Allow-Originによって許可されません。アクセスが許可されていないものがありますか? – dzm

+0

@dave:いくつかのオプションがあります。 1つは、クロス・ソース・リソース共有(http://enable-cors.org/)です。もう1つは、nginxのようなリバースプロキシの背後に2つのサーバを置いて、同じポートから(http:// yourdomain.com/live'のような特定のパスへのSocket.ioのリクエストを提供して)それらを提供させることです。 – Chuck

+0

これはsocket.ioのメリットの1つではありませんか?それは起源を越えて働くことができますか? http:// ip:8585に行くと、クライアントマシンから直接ブラウザにアクセスできます。しかしsocket.ioはそう思わない。 – dzm

関連する問題