将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
});
答案 0 :(得分:0)
好的,我找到了导致这种情况的原因。并且它不是错误“标题已经发送”,它只是加载了很长时间。
我将网站移到新服务器上。我关闭了旧服务器,但仍有很多人在浏览器中打开了网站。在新服务器上,我将socket.io更新为2.0.1,但仍然连接的用户尝试使用套接字客户端版本1.3.5连接到服务器,导致类似DDOS的东西,因为使用较旧的客户端版本,它立即打开和关闭连接。它就像每秒50个连接,所以有50个人,它减慢了服务器的速度。所以我不得不改变套接字端口,现在一切正常。
但是......我的新问题是如何保护套接字免受这种“攻击”?