同じマシン上の別のポートにあるクライアントで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/');
});
ありがとうございます!
ああ、私はそれをIPに変更しました。あなたが言ったように、私が得るブラウザでは、Access-Control-Allow-Originによって許可されません。アクセスが許可されていないものがありますか? – dzm
@dave:いくつかのオプションがあります。 1つは、クロス・ソース・リソース共有(http://enable-cors.org/)です。もう1つは、nginxのようなリバースプロキシの背後に2つのサーバを置いて、同じポートから(http:// yourdomain.com/live'のような特定のパスへのSocket.ioのリクエストを提供して)それらを提供させることです。 – Chuck
これはsocket.ioのメリットの1つではありませんか?それは起源を越えて働くことができますか? http:// ip:8585に行くと、クライアントマシンから直接ブラウザにアクセスできます。しかしsocket.ioはそう思わない。 – dzm