nodejs socket.io表示握手错误

时间:2015-11-14 22:22:35

标签: node.js sockets socket.io

我尝试通过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!');
    });

我发现了下一个错误:

  

获取http://localhost:3001/socket.io/1/?t=1447539302809 404(未找到)

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

感谢名单。

1 个答案:

答案 0 :(得分:1)

首先,请确保在某些模块未正确安装的情况下,不会出现任何错误。

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

然后,我以前看到人们对此有疑问,即使按照socket.io网站上的说明进行操作也是如此,并且从未明确该序列的确切错误。但是,我所知道的是,这个序列将起作用:

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

查看相关问题:Where is my client side socket.io?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。