我正在使用nodejs编写一个高度可扩展的基于浏览器的Web聊天服务器.涉及的概念很简单 - 首先它检查浏览器是否支持websocket.如果没有支持或以其他方式与服务器规范不兼容,它只是优雅地降级到传统的长轮询.
利用其高度优化的I/O模型,我找不到任何其他框架到目前为止这样的工作非常好和适合nodejs.但是,我有一个与DOS攻击有关的问题,我决定提出一个简单的解决方案.但是,我不太确定它是否是抵御那些大规模洪水攻击的最理想方式.
我计划做的是 - 如果源自单个IP地址的50个或更多请求在特定时间长度内(例如1秒)命中服务器,则拒绝来自该IP的所有进一步请求,直到该特定时间间隔到达失效等.
这会好吗?
在socket.io的主页上,它没有说明与可伸缩性问题相关的任何内容.有没有人知道它一次可以处理多少个并发连接?我想在我的项目中部署socket.io以进行大规模的彗星处理.例如,它声明nodejs可以轻松处理多达100K的并发连接.socket.io能否同时处理那些请求?
如何解码 websocket 中的连续帧?有人可以给我对此有用的见解吗?将连续帧解码为文本帧会导致错误。
我正在向服务器发送一个大文本字符串,我可以设法仅解码第一个传入的文本帧,然后失败。
这是 Nodejs 中处理文本帧解码的简单函数 -
function decodeWS(data)
{
var dl = data[1] & 127;
var ifm = 2;
if (dl == 126)
{
ifm = 4;
} else if (dl == 127)
{
ifm = 10;
}
var i = ifm + 4;
var masks = data.slice(ifm,i);
var index = 0;
var output = "";
var l=data.length;
while (i < l)
{
output += String.fromCharCode(data[i++] ^ masks[index++ % 4]);
}
return output;
}
Run Code Online (Sandbox Code Playgroud)