javascript - 泛洪 WebSocket

标签 javascript websocket flooding

我是 websocket 的新手,我在 web 应用程序上实现了 websocket,服务器端是用 java 编写的,客户端是 javascript。服务器通过 websocket 向客户端发送通知。 我想知道如果客户端处理传入消息的速度不如服务器发送消息的速度快,会发生什么情况。 例如,服务器可能每秒发送大约 200 条文本消息,而客户端速度较慢,每秒处理 100 条消息。 我相信浏览器会在处理传入消息之前对传入消息进行排队,但不确定。我还知道如何检查此缓冲区大小及其限制,以及如果达到缓冲区限制会发生什么。 关于如何模拟这种情况的任何想法,我都尝试过:

webSocket.onmessage = function (message) {
    var bool = true;
    var datenexexec = Date.now() + 1000;
    while(bool) {
        if(Date.now() > datenexexec){
            bool = false;
        }      
    }
}

但这只会导致浏览器挂起并随后崩溃。 感谢您的帮助。

最佳答案

为了以比客户端读取速度更快的速度发送数据,这就是最终会发生的事情。

  1. 客户端接收缓冲区将填满
  2. TCP 流量控制将启动,服务器将被告知停止在此套接字上发送更多数据包。
  3. 然后服务器将缓冲传出数据包,直到流量控制限制被移除
  4. 最终会达到服务器端缓冲区限制,底层 TCP 会拒绝套接字写入
  5. 这将从 TCP 发送返回错误。
  6. 根据您为 webSocket 使用的服务器端库,您应该在某个时候从发送操作中收到错误。

TCP 是一种可靠的协议(protocol),因此它只会缓冲并稍后传输,直到缓冲区已满。它不应该自己丢失数据包(除非连接断开),但是当缓冲区已满时,它会给你一个错误,因为缓冲区已满,它无法再发送。


至于您尝试的客户端代码,您不能在 Javascript 中忙/等待很长时间。这会终止事件循环并最终导致脚本引擎崩溃。

模拟这种情况的唯一方法是尝试实际发送比客户端可以处理的更多的数据包。您可以编写一个“慢速”客户端,它可能需要 250 毫秒来处理一个短暂的忙/等待循环中的每个数据包,以及一个发送大量数据包的“快速”服务器,您应该能够模拟它。

关于javascript - 泛洪 WebSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28723814/

相关文章:

javascript - 使用 HTML 和 CSS 制作动画 parking 场网格

javascript - 调用回调中定义的函数

python - 如何防止 Django Web 应用程序中的服务器泛洪?

javascript - 泛洪与 Javascript

c# - 如何阻止 TCP 和 UDP 数据包(洪水攻击)

javascript - React - 在加载子节点时显示加载程序

javascript - 错误: syntax error at or near "$"

javascript - 在加载 JavaScript 时将值替换为图像

Websocket问题: framing,屏蔽

python - 运行 python websocket 库示例代码时出错