nodejs socket.io 表示握手错误

nodejs socket.io express handshake error

我尝试通过 socket.io 创建一个实时应用程序。 服务器端:

var express = require('express');
var io = require('socket.io');
var engine = require('ejs-locals');

var app = express()
    , server = require('http').createServer(app)
    , io = io.listen(server);

app.engine('ejs', engine);
app.set('view engine', 'ejs');

app.get('/', function(req, res){
   res.redirect('/login')
});

app.use(express.static(__dirname + '/public'));

app.listen(3001);

io.sockets.on('connection', function (socket) {
    console.log('Client connected...');
    socket.on('send_login_data', function (data) {
        console.log(data);
    });
});

客户端:

var socket = io.connect('http://localhost:3001');
    socket.on('connect_failed', function(){
        console.log('Connection Failed');
    });
    socket.on('connecting', function () {
        console.log('connecting...');
    });

    socket.on('connect', function () {
        console.log('connected!');
    });

我发现了下一个错误:

GET http://localhost:3001/socket.io/1/?t=1447539302809 404 (Not Found)

据我了解,这是握手错误。 我该如何解决?

谢谢。

首先,绝对确保没有任何错误显示,以防某些模块安装不正确。

然后,确保客户端和服务器上的 socket.io 版本号相同,并且服务器上安装了服务器端版本。

然后,我以前看到人们对此有疑问,即使是按照 socket.io 网站上的说明进行操作也是如此,但一直不清楚该序列到底出了什么问题。但是,我所知道的是这个序列会起作用:

var express = require('express');
var app = express();
var server = app.listen(3001);
var io = require('socket.io').listen(server);

查看相关问题: and Node + Socket.io Connection issue


我不知道这是否是导致问题的原因,但您试图重新定义 io 变量,而它已经在此声明:

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

io = io.listen(server)的第二个引用基本上是这样的:

var io = require('socket.io');
var app = express();
var server = require('http').createServer(app);
var io = io.listen(server);

这是不正确的 Javascript。同样,可能不会导致您的问题,但它在技术上是不正确的 Javascript.