【问题标题】:nodejs socket.io express handshake errornodejs socket.io表达握手错误
【发布时间】:2015-11-14 22:22:35
【问题描述】:

我尝试通过 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(未找到)

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

谢谢。

【问题讨论】:

  • http://localhost:3001 的常规http 请求是否有效?
  • @jfriend00,当然,快递返回登录表单

标签: node.js sockets socket.io


【解决方案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。

【讨论】:

  • 我使用你的工作示例没有'http'模块并且它开始工作。我假设“http”模块过度编码。谢谢!
猜你喜欢
  • 2012-08-26
  • 2014-01-14
  • 2014-04-12
  • 2014-07-22
  • 1970-01-01
  • 2019-07-10
  • 2019-11-17
  • 2018-05-02
  • 2017-06-22
相关资源
最近更新 更多