我在连接到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/');
});
谢谢!
除非您在与服务器相同的计算机上运行浏览器,否则代码中的"localhost"将指运行浏览器的计算机,而不是服务器。本地主机的DNS查找始终解析为执行查找的计算机。即使您在与服务器相同的计算机上访问该网站,除非您以"localhost"身份访问,否则浏览器的安全策略将阻止您与localhost对话。