运行Express时,Socket.IO无法连接到服务器

我正在尝试使用Node.js,Express.js和Socket.IO编写一个小应用程序。

服务器运行良好,我可以提供HTML和其他静态内容。 但我有一个时间让客户端通过Socket.IO连接到服务器。

当我不使用快递它工作正常,但与快递我似乎无法让一切合作。 我不确定在使用Express和Socket.IO时是否有一些特殊的考虑。

我的一部分认为这可能是一个路线问题?

它看起来像当套接字尝试连接它是404':

GET http://localhost:3000/socket.io/1/?t=1403186531515 400 Bad Request 1ms 

服务器代码:

 var express = require('express') , app = express() , http = require('http') , server = http.createServer(app).listen(3000) , io = require('socket.io').listen(server) , favicon = require('static-favicon') , logger = require('morgan') , cookieParser = require('cookie-parser') , session = require('express-session') , routes = require('./routes/index') , path = require('path') , bodyParser = require('body-parser'); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hjs'); app.use(favicon()); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(cookieParser()); app.use(session({secret: 'keyboard cat'})); app.use(require('less-middleware')(path.join(__dirname, 'public'))); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); // error handlers // development error handler // will print stacktrace if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } // production error handler // no stacktraces leaked to user app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); io.sockets.on('connection', function (socket) { //message new connection socket.emit('message', { message: 'Message from server.' }); //message all connections socket.on('send', function (data) { io.sockets.emit('message', data); }); }); 

客户代码:

 ** html and other js omitted ** <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script> <script> var socket = io.connect('http://localhost:3000'); </script> 

我也试过了

 var socket = io.connect('ws://localhost:3000'); 

无济于事。

谢谢你的帮助!

尝试交换将服务器绑定到端口的顺序:

 var express = require('express') , app = express() , http = require('http') , server = http.Server(app) , io = require('socket.io').listen(server) server.listen(3000); 

向Doug Wilson 发表他对GitHub的评论,这帮助我解决了这个问题。

你试一试 :

 var socket = io.connect(); 

不知道为什么你在客户端上使用CDN,但你可以使用本地资源(由socket.io在后台服务)

所以用下面的脚本replace你的脚本

 <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(); // or just io(); </script> 

您可以在Socket.io 入门简单聊天示例中获得更多帮助