gpt4 book ai didi

javascript - 在js中调用emit

转载 作者:行者123 更新时间:2023-12-03 03:20:32 25 4
gpt4 key购买 nike

我一直在试图回答如果emit没有任何注册的监听器会发生什么。

如果客户端在没有任何监听器的情况下通过发出垃圾邮件,是否会导致漏洞?

while(true){
socket.emit('not_registered_event_string');
}

最佳答案

如果您在没有任何监听器的情况下.emit(),则不会导致任何问题。 EventEmitter 对象只会检查您传入的监听器列表中的消息名称,但不会发现任何监听器,因此不会执行任何操作。

但是,服务器中的此循环:

while(true){
socket.emit('not_registered_event_string');
}

是一个无限循环,会阻止你的node.js进程做任何其他事情。它将永远陷入该循环中,并且无法处理任何其他事件或执行任何其他操作。

这是因为 Node.js 在单个线程中运行 JavaScript,因此只要该单个线程在上面的 while 循环中循环,它就无法处理任何其他消息或执行任何其他操作。 Node.js 是一个事件驱动的环境。您收到一个事件,处理该事件,将控制权返回给系统,然后系统可以处理下一个事件。如果您永远循环,则不会处理任何事件,并且您的 Node.js 进程将显示为挂起(即使您的循环可能仍在运行)。

<小时/>

客户端中的相同循环只会向您的服务器发送大量消息。服务器可能可以很好地处理它们,因为如果没有监听器,则在接收到它们时基本上无需执行任何操作。但是,仅仅处理空消息就会占用服务器的带宽和 CPU。

如果您想保护您的服务器免受客户端垃圾邮件事件的影响,您可以对客户端进行“速率限制”,如果它超过每秒或每分钟消息的特定速率,您可以删除其连接。速率限制是一个经过深入研究的主题,已经写了很多文章,并且有许多带有 Node.js 预构建包的方案来帮助实现速率限制。我读过的一个常见的内容是 "leaky bucket" algorithm .

速率限制是服务器保护自己免受恶意客户端侵害的常用方法。如果持续滥用,您甚至可能会暂停或撤销该帐户对您网站的访问权限,使该帐户甚至无法登录您的网站。人们喜欢 Google 对大多数(也许是全部)服务使用速率限制,以保护他们免受意外或故意的过载攻击。

关于javascript - 在js中调用emit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com