【问题标题】:Socket.io error: "headers already sent" after updateSocket.io 错误:更新后“标头已发送”
【发布时间】:2017-05-19 12:12:59
【问题描述】:

在将 socket.io 从版本 1.3.5 更新到 2.0.1 后,连接到服务器时出现错误:“标头已发送”,但并非总是如此,有时它可以工作。

我也更新了 node(4.5.0=>6.10.3) 和 express(4.14.0=>4.15.3) 但我觉得这是 socket.io 的问题。

这是我的代码,它在 1.3.5 上运行没有问题:

var app = require("express")();
var https = require('https');

var server = https.createServer({ 
                key: fs.readFileSync('key.key'),
                cert: fs.readFileSync('cert.crt'),
                ca: fs.readFileSync('Chain-SHA2.crt'),
                requestCert: false,
                rejectUnauthorized: false
             },app);
server.listen(8081);

var io = require('socket.io')(server);



app.post("/xxx", function(request, response) {
    //some code
});

app.listen(8080);



io.on('connection', function(socket){
    //some code
});

【问题讨论】:

  • 我相信这个问题会受益于添加你得到的错误的堆栈跟踪。

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


【解决方案1】:

好的,我找到了造成这种情况的原因。而且它不是错误“标头已发送”,它只是加载了很长时间。

我将网站移至新服务器。我关闭了旧服务器,但仍然有很多人在浏览器中打开了网站。在新服务器上,我将 socket.io 更新为 2.0.1,但仍然连接的用户尝试使用导致 DDOS 之类的套接字客户端版本 1.3.5 连接到服务器,因为使用旧客户端版本它会立即打开和关闭连接.这就像每秒 50 个连接,所以有 50 个人会降低服务器的速度。所以我不得不更改套接字端口,现在一切正常。

但是...我的新问题是如何保护套接字免受这种“攻击”?

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 2023-03-11
    • 1970-01-01
    • 2016-02-22
    • 2011-07-04
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多