Skip to content

协议 gzip 压缩分析

分析日期: 2026-01-13 数据来源: 客户端实际运行日志 分析目的: 找出最适合启用 gzip 压缩的协议


概述

本文档基于实际运行数据,分析各协议的大小、耗时、调用频率,为 gzip 压缩策略提供数据支撑。

当前压缩机制

  • 全局开关: Protocol.gzipSwitch
  • 协议开关: Protocol.openGzip
  • 压缩路由: connector.entryHandler.protocolEntry_compress
  • 普通路由: connector.entryHandler.protocolEntry

完整协议数据

原始日志数据

以下是单次完整登录流程中采集的所有协议数据:

序号协议名数据大小总耗时解析耗时
1c2s_use_game_features744B342ms0ms
2c2s_use_game_features747B311ms0ms
3c2s_use_game_features767B353ms0ms
4c2s_use_game_features625B299ms0ms
5c2s_use_game_features543B342ms0ms
6c2s_use_game_features615B376ms0ms
7c2s_use_game_features471B318ms0ms
8c2s_get_open_activities56B315ms0ms
9c2s_get_game_features25,307B338ms0ms
10c2s_use_game_features95B318ms0ms
11c2s_use_game_features2,257B310ms0ms
12c2s_use_game_features297B326ms0ms
13c2s_use_game_features176B375ms0ms
14c2s_use_game_features342B339ms0ms
15c2s_use_game_features174B294ms0ms
16c2s_get_open_activities57B349ms0ms
17c2s_use_game_features1,292B317ms0ms
18c2s_use_game_features107B372ms0ms
19c2s_login3,875B321ms0ms
20c2s_get_subjects128,339B409ms0ms
21c2s_get_shops40,037B710ms0ms
22c2s_get_timed_challenge315B4ms0ms
23c2s_get_operation_info87B4ms0ms
24c2s_get_spin_mode_activity1,118B118ms0ms
25c2s_get_group_link32B246ms0ms
26c2s_ad_control747B388ms0ms
27c2s_get_game_features42,492B528ms0ms
28c2s_daily_shop_pop_up35B96ms0ms
29c2s_get_activities62,318B328ms0ms
30c2s_get_hourly_bonus194B189ms0ms
31c2s_get_daily_bonus614B273ms0ms
32c2s_get_login_bonus3,292B393ms0ms
33c2s_get_reward5,180B511ms0ms
34c2s_get_clover_clash4,017B147ms0ms
35c2s_get_clover_clash4,950B192ms0ms
36c2s_get_operation_info86B129ms0ms
37c2s_get_smoke27B68ms0ms
38c2s_get_processing_purchase242B263ms0ms
39c2s_get_system_message51B323ms0ms
40c2s_get_mails38B391ms0ms
41c2s_enter_room2,339B733ms0ms
42c2s_update_prize_pool_players365B273ms0ms
43c2s_claim_special_activity_reward5,418B423ms0ms
44c2s_spin2,440B330ms0ms
45c2s_update_prize_pool_players369B403ms0ms
46c2s_update_prize_pool_players369B319ms0ms
47c2s_update_prize_pool_players369B306ms0ms
48c2s_update_prize_pool_players369B301ms0ms
49c2s_update_prize_pool_players368B338ms0ms
50c2s_update_prize_pool_players381B305ms0ms
51c2s_update_prize_pool_players381B300ms0ms
52c2s_update_prize_pool_players381B378ms0ms
53c2s_update_prize_pool_players381B366ms0ms
54c2s_update_prize_pool_players387B346ms0ms
55c2s_claim_special_activity_reward1,014B331ms0ms

统计分析

按数据大小排序(降序)

排名协议名数据大小耗时压缩建议
1c2s_get_subjects128,339B (125.3KB)409ms🔴 强烈推荐
2c2s_get_activities62,318B (60.9KB)328ms🔴 强烈推荐
3c2s_get_game_features42,492B (41.5KB)528ms🔴 强烈推荐
4c2s_get_shops40,037B (39.1KB)710ms🔴 强烈推荐
5c2s_get_game_features25,307B (24.7KB)338ms🔴 强烈推荐
6c2s_claim_special_activity_reward5,418B (5.3KB)423ms🟡 建议
7c2s_get_reward5,180B (5.1KB)511ms🟡 建议
8c2s_get_clover_clash4,950B (4.8KB)192ms🟡 建议
9c2s_get_clover_clash4,017B (3.9KB)147ms🟡 建议
10c2s_login3,875B (3.8KB)321ms🟡 建议
11c2s_get_login_bonus3,292B (3.2KB)393ms🟡 建议
12c2s_spin2,440B (2.4KB)330ms🟡 建议
13c2s_enter_room2,339B (2.3KB)733ms🟡 建议
14c2s_use_game_features2,257B (2.2KB)310ms🟡 建议
15c2s_use_game_features1,292B (1.3KB)317ms🟢 可选
16c2s_get_spin_mode_activity1,118B (1.1KB)118ms🟢 可选
17c2s_claim_special_activity_reward1,014B (1.0KB)331ms🟢 可选
18c2s_use_game_features767B353ms⚪ 不推荐
19c2s_ad_control747B388ms⚪ 不推荐
20c2s_use_game_features747B311ms⚪ 不推荐
21c2s_use_game_features744B342ms⚪ 不推荐
22c2s_use_game_features625B299ms⚪ 不推荐
23c2s_use_game_features615B376ms⚪ 不推荐
24c2s_get_daily_bonus614B273ms⚪ 不推荐
25c2s_use_game_features543B342ms⚪ 不推荐
26c2s_use_game_features471B318ms⚪ 不推荐
27c2s_update_prize_pool_players387B346ms⚪ 不推荐
28c2s_update_prize_pool_players381B305ms⚪ 不推荐
29c2s_update_prize_pool_players381B300ms⚪ 不推荐
30c2s_update_prize_pool_players381B378ms⚪ 不推荐
31c2s_update_prize_pool_players381B366ms⚪ 不推荐
32c2s_update_prize_pool_players369B403ms⚪ 不推荐
33c2s_update_prize_pool_players369B319ms⚪ 不推荐
34c2s_update_prize_pool_players369B306ms⚪ 不推荐
35c2s_update_prize_pool_players369B301ms⚪ 不推荐
36c2s_update_prize_pool_players368B338ms⚪ 不推荐
37c2s_update_prize_pool_players365B273ms⚪ 不推荐
38c2s_use_game_features342B339ms⚪ 不推荐
39c2s_get_timed_challenge315B4ms⚪ 不推荐
40c2s_use_game_features297B326ms⚪ 不推荐
41c2s_get_processing_purchase242B263ms⚪ 不推荐
42c2s_get_hourly_bonus194B189ms⚪ 不推荐
43c2s_use_game_features176B375ms⚪ 不推荐
44c2s_use_game_features174B294ms⚪ 不推荐
45c2s_use_game_features107B372ms⚪ 不推荐
46c2s_use_game_features95B318ms⚪ 不推荐
47c2s_get_operation_info87B4ms⚪ 不推荐
48c2s_get_operation_info86B129ms⚪ 不推荐
49c2s_get_open_activities57B349ms⚪ 不推荐
50c2s_get_open_activities56B315ms⚪ 不推荐
51c2s_get_system_message51B323ms⚪ 不推荐
52c2s_get_mails38B391ms⚪ 不推荐
53c2s_daily_shop_pop_up35B96ms⚪ 不推荐
54c2s_get_group_link32B246ms⚪ 不推荐
55c2s_get_smoke27B68ms⚪ 不推荐

按调用频率统计

协议名调用次数总数据量平均大小平均耗时
c2s_use_game_features149,251B661B328ms
c2s_update_prize_pool_players124,479B373B330ms
c2s_get_clover_clash28,967B4,484B170ms
c2s_get_game_features267,799B33,900B433ms
c2s_get_open_activities2113B57B332ms
c2s_get_operation_info2173B87B67ms
c2s_claim_special_activity_reward26,432B3,216B377ms
c2s_login13,875B3,875B321ms
c2s_get_subjects1128,339B128,339B409ms
c2s_get_shops140,037B40,037B710ms
c2s_get_activities162,318B62,318B328ms
c2s_enter_room12,339B2,339B733ms
c2s_spin12,440B2,440B330ms
c2s_get_reward15,180B5,180B511ms
c2s_get_login_bonus13,292B3,292B393ms
c2s_get_daily_bonus1614B614B273ms
c2s_get_hourly_bonus1194B194B189ms
c2s_ad_control1747B747B388ms
c2s_get_spin_mode_activity11,118B1,118B118ms
c2s_get_timed_challenge1315B315B4ms
c2s_get_group_link132B32B246ms
c2s_daily_shop_pop_up135B35B96ms
c2s_get_processing_purchase1242B242B263ms
c2s_get_system_message151B51B323ms
c2s_get_mails138B38B391ms
c2s_get_smoke127B27B68ms

按耗时排序(降序)

排名协议名耗时数据大小备注
1c2s_enter_room733ms2,339B进房协议,涉及业务逻辑
2c2s_get_shops710ms40,037B数据量大
3c2s_get_game_features528ms42,492B数据量大
4c2s_get_reward511ms5,180B业务逻辑复杂
5c2s_claim_special_activity_reward423ms5,418B活动奖励
6c2s_get_subjects409ms128,339B数据量最大
7c2s_update_prize_pool_players403ms369B频繁调用
8c2s_get_login_bonus393ms3,292B登录奖励
9c2s_get_mails391ms38B网络延迟
10c2s_ad_control388ms747B广告控制

压缩收益预估

假设条件

  • JSON 数据 gzip 压缩率约 85-95%(取 90% 计算)
  • 解压耗时约 5-15ms(根据数据大小)
  • JSON 解析耗时约 0-5ms

收益计算

协议名原始大小压缩后预估节省流量解压开销净收益
c2s_get_subjects125.3KB~12.5KB112.8KB~15ms✅ 高
c2s_get_activities60.9KB~6.1KB54.8KB~10ms✅ 高
c2s_get_game_features41.5KB~4.2KB37.3KB~8ms✅ 高
c2s_get_shops39.1KB~3.9KB35.2KB~8ms✅ 高
c2s_get_game_features24.7KB~2.5KB22.2KB~5ms✅ 高
c2s_claim_special_activity_reward5.3KB~0.5KB4.8KB~3ms✅ 中
c2s_get_reward5.1KB~0.5KB4.6KB~3ms✅ 中
c2s_get_clover_clash4.8KB~0.5KB4.3KB~3ms✅ 中
c2s_login3.8KB~0.4KB3.4KB~2ms✅ 中
c2s_get_login_bonus3.2KB~0.3KB2.9KB~2ms✅ 中
c2s_spin2.4KB~0.2KB2.2KB~2ms✅ 低
c2s_enter_room2.3KB~0.2KB2.1KB~2ms✅ 低

单次登录总收益

指标数值
原始数据总量347,523B (339.4KB)
可压缩数据量(≥2KB)329,556B (321.8KB)
压缩后预估~32KB
节省流量~290KB

压缩策略建议

服务端压缩机制

客户端协议设置 this.openGzip = true 表示该协议支持接收压缩数据,但服务端会根据响应数据大小决定是否实际压缩:

响应数据大小服务端行为原因
≥ 5KB执行 gzip 压缩压缩收益明显
< 5KB不压缩,返回原始数据数据太小,压缩率低,CPU 开销得不偿失

关键点

  • openGzip = true 只是表明客户端具备解压能力
  • 服务端根据 5KB 阈值自动判断是否需要压缩
  • 压缩后返回 compressGzip: true,未压缩则不带此字段

客户端建议阈值

响应数据 2KB 建议启用 openGzip(给服务端压缩的机会)
响应数据 < 2KB 不必启用(服务端也不会压缩)

分级压缩策略

🔴 第一优先级(强烈推荐)

立即启用压缩,收益最大:

协议原因
c2s_get_subjects128KB,单次节省超 100KB
c2s_get_activities62KB,活动数据重复性高
c2s_get_game_features42KB,高频调用
c2s_get_shops40KB,商店数据结构化

🟡 第二优先级(建议)

收益中等,建议启用:

协议原因
c2s_get_reward5KB,登录必经
c2s_claim_special_activity_reward5KB,活动奖励
c2s_get_clover_clash5KB,活动数据
c2s_login4KB,首次登录
c2s_get_login_bonus3KB,登录奖励
c2s_spin2.4KB,高频
c2s_enter_room2.3KB,进房必经

🟢 第三优先级(可选)

收益较小,视情况启用:

协议原因
c2s_use_game_features (>1KB)部分调用超过 1KB
c2s_get_spin_mode_activity1.1KB,边界值

⚪ 不推荐压缩

数据量太小,压缩开销大于收益:

  • 所有 < 1KB 的协议
  • c2s_update_prize_pool_players(高频但数据小)
  • c2s_get_open_activitiesc2s_get_operation_info

实施建议

服务端配置

需要为以下协议启用 gzip 压缩响应:

javascript
// 强烈推荐
"c2s_get_subjects"
"c2s_get_activities"
"c2s_get_game_features"
"c2s_get_shops"

// 建议
"c2s_get_reward"
"c2s_claim_special_activity_reward"
"c2s_get_clover_clash"
"c2s_login"
"c2s_get_login_bonus"
"c2s_spin"
"c2s_enter_room"

客户端配置

在对应协议类中设置 openGzip = true

javascript
// 示例:GetSubjectsProtocol.js
var GetSubjectsProtocol = function () {
    Protocol.call(this, "c2s_get_subjects");
    this.openGzip = true;  // 启用压缩
};

监控指标

启用压缩后,关注以下指标:

  1. 压缩率: 预期 85-95%
  2. 解压耗时: 预期 < 20ms
  3. 总耗时变化: 预期减少(节省传输时间 > 解压开销)
  4. 内存占用: 解压过程会临时占用内存

附录

数据采集环境

  • 客户端版本: CV (Classic Vegas)
  • 网络环境: 正常网络
  • 采集时间: 2026-01-13
  • 采集范围: 单次完整登录流程 + 进房 + Spin

相关文件

  • src/common/protocol/Protocol.js - 协议基类
  • src/common/net/PomeloClient.js - 网络层
  • node_modules/@me2zen/pomelo-jsclient-websocket/lib/pomelo-client.js - Pomelo 客户端

最后更新: 2026-01-13 维护者: WTC Team

Released under the MIT License.