【问题标题】:Socket.io setup causes hundreds of transport polling GET requestsSocket.io 设置导致数百个传输轮询 GET 请求
【发布时间】:2016-01-19 07:39:33
【问题描述】:

我正在使用 express.js 服务器端,并遵循了 socket.io setup guide。不幸的是,套接字连接永远不会成功,并且我收到了大量的 GET 请求,如下所示:

这是我的设置:

客户端 - index.html

<script src="https://cdn.socket.io/socket.io-1.3.7.js"></script>
 <script>
  // var socket = io.connect('http://localhost');
  var socket = io.connect('http://localhost:9000/');

  socket.on('connected', function (serverData) {
    console.log(serverData);
  });
</script>

服务器 - /io/index.js

'use strict';
var socketio = require('socket.io');
var io = null;

module.exports = function(server) {

    if (io) return io;

    io = socketio(server);

    io.on('connection', function(socket) {
        console.log('Sockets connected!');
        socket.emit('connected', 'Sockets connected!')
    })

    return io;

};

服务器 - app.js

'use strict';

// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';

var express = require('express');
var mongoose = require('mongoose');
var config = require('./config/environment');

// Connect to MongoDB
mongoose.connect(config.mongo.uri, config.mongo.options);
mongoose.connection.on('error', function(err) {
  console.error('MongoDB connection error: ' + err);
  process.exit(-1);
});

// Populate databases with sample data
if (config.seedDB) { require('./config/seed'); }

// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);

// Setup sockets
require('./io')(server);

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

setImmediate(startServer);

// Expose app
exports = module.exports = {
    app: app,
    server: server
}

【问题讨论】:

  • 注意:按照文档的指示,通过&lt;script src="/socket.io/socket.io.js"&gt;&lt;/script&gt; 在客户端要求socket.io 会导致successful server connection but an unexpected token error in the client console
  • 也许告诉服务器端你正在监听端口 9000 !客户端尝试服务器端口 9000 var socket = io.connect('http://localhost:9000/');
  • 感谢@Anonymous0day,但我正在客户端执行此操作,并且服务器确实在监听 9000。如果我将 9000 硬编码到服务器,我仍然会收到相同的错误(100 次轮询请求)
  • 那么:require('./io')(server);,如果你改为:require('./io/index.js')(server);
  • 感谢您的跟进,但这也不起作用:( @Anonymous0day

标签: javascript node.js sockets express socket.io


【解决方案1】:

当客户端没有到达服务器时,通常会发生这种情况。
客户一次又一次地尝试。 . .
为此,您必须检查服务器端的配置,检查端口和路径通常是您应该检查的第一件事。

在你的情况下,也许你应该检查这部分:

//require('./io')(server);  typo error ??       
require('./io/index.js')(server);

更进一步,您似乎没有给出好的部分:
(可能取决于您使用的版本)

// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);

// Setup sockets
require('./io')(server);

我认为应该是:

// Setup server
var app = express();
var server = require('http').createServer(app);
require('./config/express')(app);
require('./routes')(app);

// Setup sockets
//require('./io')(server); |O----------------------------------|
require('./io/index.js')(app);//<---we pass app as argument----|

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2012-02-22
    • 1970-01-01
    • 2012-06-06
    • 2017-02-20
    • 1970-01-01
    • 2018-04-28
    相关资源
    最近更新 更多