# 盒子IM压测模拟器 **Repository Path**: bluexsx/box-im-simulator ## Basic Information - **Project Name**: 盒子IM压测模拟器 - **Description**: 模拟盒子IM用户登录,进行压力测试的工具 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 3 - **Created**: 2026-05-26 - **Last Updated**: 2026-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 盒子 IM 压测模拟器 面向 [盒子 IM](https://gitee.com/bluexsx/box-im) 的**压测 / 联调辅助工具**:从 MySQL 读取测试用户,批量调用 `im-platform` 登录并维持 `im-server` WebSocket 在线,再通过 HTTP 模拟私聊、群聊发送,并统计 WebSocket 侧收到的消息量。 > **仅建议在独立测试环境使用**。请勿对生产库执行 `db/` 脚本或对生产集群做大规模压测。 ## 功能概览 | 能力 | 说明 | |------|--------------------------------| | 批量登录 | 按id升序取前N名用户,模拟登录 + ws建连 + 心跳保活 | | 模拟私聊 | 模拟多个用户对其好友轮发私聊请求,统计接收到的消息数量 | | 模拟群聊 | 按群规模选群,模拟多个用户轮发群消息,统计接收到的消息数量 | ## 依赖服务 压测前需已启动并与配置地址一致: | 服务 | 默认端口 | 作用 | |-----------------|--------|-----------------------| | **im-platform** | `8888` | 用户登录、私聊、群聊接口 | | **im-server** | `8878` | ws 长连接 | | **MySQL** | `3306` | 与 im-platform **同一业务库** | 本模块自身默认监听 **`9091`**。 ## 快速开始 ### 1. 准备测试数据 初始化一个新的im_platform_test库,并执行`db/汇总.sql`,执行成功会生成如下数据: 1. **用户数据**:生成10000名用户,id为1~10000,用户名为TT0000~TT9999,密码都是123456 2. **好友数据**:用户 1~1000 两两互相添加好友 3. **十人群**:创建1000个十人群,用户 1~1000分别加入10个十人群 4. **百人群**:创建100个百人群,用户 1~1000分别加入10个百人群 5. **千人群**:创建10个千人群,用户 1~1000分别加入这10个千人群 6. **万人群**:创建10个万人群,用户 1~10000分别加入这10个万人群 用户 1~1000将会分别拥有999个好友,分别进入10个十人群、百人群、千人群、万人群 ### 2. 修改配置 编辑 `src/main/resources/application.yml`的数据库配置和接口信息: ```yaml spring: datasource: url: jdbc:mysql://127.0.0.1:3306/im_platform_test? username: root password: root simulator: api-url: http://127.0.0.1:8888 # im-platform 根地址 ws-url: ws://127.0.0.1:8878/im # 须与 im-server ws路径一致 login-password: "123456" # 与库中测试用户明文密码一致 ``` ### 3. 编译与启动 ```bash cd box-im-simulator mvn clean package java -jar target/im-simulator.jar ``` ### 4. 打开 Web 控制台 浏览器访问:**http://127.0.0.1:9091/** ## 使用说明 ### 批量登录 - 从库中取 `id` 最小的前 **N** 个用户 - 每个用户会调用im-platform的登录接口,并保持ws连接以及维持心跳。 ### 模拟私聊 - 取前 **a** 个用户为发送方;每人从好友表取前 **b** 个好友为接收方;共 **c** 轮。 - 发送用户数同时也是发送线程数,可以理解为每个线程模拟一个用户进行消息发送 - **HTTP 请求总量** = `a × b × c`。 - 若**WS 接收量**最终等于**HTTP 请求总量**,说明消息已全部接收完毕 ### 模拟群聊 - 群规模与库中群名前缀(十人群 / 百人群 / 千人群 / 万人群)对应。 - 前 **a** 个用户为发送方;每人从其已加入、名称匹配前缀的群中按 `id` 升序取前 **b** 个群;共 **c** 轮。 - 发送用户数同时也是发送线程数,可以理解为每个线程模拟一个用户进行消息发送 - **HTTP 请求总量** = `a × b × c` - 群成员全部在线的前提下,若 **WS 总量** = `HTTP 请求总量 x (群在线人数-1)`,说明消息已全部接收完毕 ### 任务互斥 本模拟同一时刻仅支持单用户使用,不支持多用户并发执行。