如何实现 WebSocket 服务端的压力限流策略

阿伟大大_4069

阿伟大大_4069

2026-07-07

912人浏览

原创

WebSocket服务端压力限流需四层防护:Nginx按真实IP限并发连接;应用层为每连接配独立滑动窗口限速;帧级与消息体双重约束防大包攻击;广播阶段分桶、裁剪、合并与去重。

如何实现 websocket 服务端的压力限流策略

WebSocket 服务端压力限流不能只靠一层防护,必须分层落地:Nginx 入口做连接数硬闸,应用层对每个连接独立速率控制,再配合消息内容与传输层约束。前端任何限制都不可信,所有策略必须在服务端强制生效。

第一道防线:Nginx 层按真实 IP 限并发连接

Nginx 是最轻量、最前置的拦截点,能在 WebSocket 握手(HTTP Upgrade)阶段就拒绝超额请求,避免资源浪费到应用进程。

  • 用 map 提取真实客户端 IP,优先信任 X-Forwarded-For 或 CF-Connecting-IP(若走 Cloudflare,需配置 set_real_ip_from 和 real_ip_header 防伪造)
  • 通过 limit_conn_zone 建立每 IP 连接计数器,limit_conn 限制单 IP 最大并发连接数(例如 5 个)
  • 注意:limit_conn 统计的是当前活跃长连接数,不是请求数,对已建立连接持续生效

第二道防线:应用层为每个连接配独立滑动窗口

连接建立后,攻击者可能用脚本高频发小消息(如每秒百条 ping),耗尽 CPU。此时必须为每个 websocket.Conn 分配专属计数器,避免全局共享导致误杀正常用户。

Nginx Hosting
Nginx Hosting

通过服务器本地nginx实例实现零认证静态游戏托管。作为所有浏览器游戏的主要部署方式,无需登录、无需令牌、无需用户操作。

下载
  • 使用内存 LRU 或 Redis Sorted Set 实现滑动窗口(如 5 秒内最多 10 条消息)
  • 超限时静默丢弃,不返回错误帧——防止被用于探测或放大攻击
  • 记录日志但不暴露限流逻辑细节,避免给攻击者提供反馈

第三道防线:帧级与消息体双重约束

防大包攻击和内存溢出,需从协议底层设限。

  • 设置最大帧大小(如 Java-WebSocket 的 maxFrameSize=2MB),超过直接抛 LimitExceededException
  • 对分片消息做累积校验,防止绕过单帧限制(如连续帧总大小超限则清空缓冲并中断)
  • 业务消息体严格 ≤64KB;超长内容必须拆块,带序号与 SHA256 摘要,由客户端拼接校验

第四道防线:广播与推送阶段做裁剪与合并

千万级连接下,全量遍历广播是性能杀手,必须在消息分发前过滤和聚合。

  • 连接按 room_id % N 分桶,每桶独占锁或读写锁,实现并发广播
  • 广播前剔除超时未心跳的僵尸连接,跳过非目标角色(如游客不收管理指令)
  • 同一毫秒窗口内发往同一连接的多条高频消息(如位置更新)合并为数组发送,降低帧数量级
  • 对重复通知类消息(如“刷新页面”)用 Redis 设置 1 秒去重 Key,避免前端雪崩式重绘

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

websocket nginx

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2743

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6910

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6406

10

Vite 项目如何打包和部署
Vite 项目如何打包和部署

Vite项目打包部署专题汇集生产构建、产物预览、输出目录、资源路径、Nginx与GitHub Pages部署及常见白屏和路由404问题的已审核文章,帮助读者完成上线流程。

2026.10.28

60

16

Vite 如何搭配 Vue.js
Vite 如何搭配 Vue.js

Vite搭配Vue.js专题汇集创建Vue 3项目、配置开发环境、路径别名、Vue插件、代理、多环境构建与调试的已审核文章,帮助读者完成从初始化到日常开发的配置。

2026.10.28

20

15

Vite 项目目录怎么看
Vite 项目目录怎么看

Vite项目目录专题汇集入口文件、src源码、public静态资源、路径别名、项目根目录和构建输出目录相关的已审核文章,帮助读者理解各文件夹的用途与引用方式。

2026.10.28

40

10

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

2026.10.22

140

11

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

2026.10.22

80

10

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

2026.10.22

80

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebSocket手册
WebSocket手册

共0课时 | 0人学习

Webman中文手册
Webman中文手册

共0课时 | 0人学习