Socket.io错误:"标头已经发送"更新后

时间:2017-05-19 12:13:00

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

将socket.io从版本1.3.5更新到2.0.1我在连接到服务器时遇到错误:"标头已经发送",但并非总是如此,有时它可以正常工作。

我更新了节点(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
});

1 个答案:

答案 0 :(得分:0)

好的,我找到了导致这种情况的原因。并且它不是错误“标题已经发送”,它只是加载了很长时间。

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

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