Socket.io连接恢复为轮询,从不触发'连接'处理程序

 手机用户2602896463 发布于 2023-01-09 17:10

我正在尝试将socket.io添加到express上现有的node.js应用程序中.我在服务器端添加了socket.io库,如下所示(直接跟随http://socket.io/get-started/chat/):

var express = require('express')
    , http = require('http')
    , path = require('path')
    , fs = require('fs');

var app = express();
var http = http.Server(app);
var io = require('socket.io')(http);

// Express settings [...]
// Express routes [...]

// Socket.io Communication
io.on('connection', function(socket) {
  console.log('a user connected');
});


// Start server
app.listen(config.port, function () {
  console.log('Express server listening on port %d in %s mode', config.port, app.get('env'));
});

现在,在前端我只是建立一个连接:



但是,控制台不是在控制台中显示"用户连接",而是记录连续的轮询流.我在Mac上使用最新版本的Chrome,它支持websockets.

GET /socket.io/?EIO=2&transport=polling&t=1402521519446-91 200 94ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519447-92 200 93ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519485-93 200 53ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519580-94 200 143ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519582-95 200 144ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519633-96 200 40ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519778-97 200 92ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519780-98 200 92ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519818-99 200 36ms - 6.96kb
GET /socket.io/?EIO=2&transport=polling&t=1402521519912-100 200 81ms - 6.96kb
[etc]

我一定做错了什么.我对此很陌生,我很乐意指出正确的方向.如果我需要详细说明这个问题的任何部分,请告诉我.

谢谢! - 爱德华

===========

编辑:

这是我目前正在使用的快速设置.我在一个全新的节点应用程序上尝试了相同的步骤,它似乎工作正常,所以我想知道是否有任何这可能是问题.

app.configure('development', function(){
    app.use(require('connect-livereload')());

    // Disable caching of scripts for easier testing
    app.use(function noCache(req, res, next) {
        if (req.url.indexOf('/scripts/') === 0) {
            res.header('Cache-Control', 'no-cache, no-store, must-revalidate');
            res.header('Pragma', 'no-cache');
            res.header('Expires', 0);
        }
        next();
    });

    app.use(express.bodyParser({limit: '50mb'})); // increase limit for audio recordings
    app.use(express.static(path.join(config.root, '.tmp')));
    app.use(express.static(path.join(config.root, 'app')));
    app.use(express.errorHandler());
    app.use(express.logger('dev'));

    util.logger.add(loggly, { 
        [...Credentials...]
    });
    app.set('views', config.root + '/app/views');
});

小智.. 31

我有同样的问题,我解决它的方式是替换它

// Start server
app.listen(config.port, function () {
    console.log('Express server listening on port %d in %s mode', config.port, app.get('env'));
});

有了这个:

// Start server
http.listen(config.port, function () {
    console.log('Express server listening on port %d in %s mode', config.port, app.get('env'));
});

这篇文章有点解释了原因:https://stackoverflow.com/a/17697134/1515130

1 个回答
  • 我有同样的问题,我解决它的方式是替换它

    // Start server
    app.listen(config.port, function () {
        console.log('Express server listening on port %d in %s mode', config.port, app.get('env'));
    });
    

    有了这个:

    // Start server
    http.listen(config.port, function () {
        console.log('Express server listening on port %d in %s mode', config.port, app.get('env'));
    });
    

    这篇文章有点解释了原因:https://stackoverflow.com/a/17697134/1515130

    2023-01-09 17:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有