Socket.io 错误:更新后"headers already sent"



将 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
});
好的,

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

我将网站移动到新服务器。我关闭了旧服务器,但仍然有很多人在浏览器中打开了网站。在新服务器上,我将 socket.io 更新为 2.0.1,但仍然连接的用户试图连接到套接字客户端版本 1.3.5 的服务器,这会导致类似 DDOS 的情况,因为对于较旧的客户端版本,它会立即打开和关闭连接。它就像每秒 50 个连接,所以对于 50 个人来说,它正在减慢服务器的速度。所以我不得不更换插座端口,现在一切都很好。

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

相关内容

最新更新