perf: 优化挂机心跳接口,无奖励变动心跳拒绝写库save,仅在Redis保活以释放I/O压力
This commit is contained in:
@@ -619,15 +619,20 @@ class ChatController extends Controller
|
||||
$superLevel = (int) Sysparam::getValue('superlevel', '100');
|
||||
$leveledUp = $this->calculateNewLevel($user, $superLevel);
|
||||
|
||||
$user->save(); // 存点入库
|
||||
$hasChanges = $leveledUp || ($canGainReward && ($actualExpGain > 0 || $actualJjbGain > 0));
|
||||
|
||||
if ($hasChanges) {
|
||||
$user->save(); // 存点入库
|
||||
// 将新的等级与资产状态反馈给当前用户的在线名单上,确保别人查看到的也是最准确等级
|
||||
$this->chatState->userJoin($id, $user->username, $this->chatUserPresenceService->build($user));
|
||||
} else {
|
||||
// 无变动时,仅在 Redis 层面保活该用户的在线状态,拒绝写库并减少 Redis HSET 负荷
|
||||
$this->chatState->refreshAlive($id, $user->username);
|
||||
}
|
||||
|
||||
// 手动心跳存点:同步更新在职用户的勤务时长
|
||||
$this->tickDutyLog($user, $id);
|
||||
|
||||
// 3. 将新的等级反馈给当前用户的在线名单上
|
||||
// 确保刚刚升级后别人查看到的也是最准确等级
|
||||
$this->chatState->userJoin($id, $user->username, $this->chatUserPresenceService->build($user));
|
||||
|
||||
// 4. 如果突破境界,向全房系统喊话广播!
|
||||
if ($leveledUp) {
|
||||
// 生成炫酷广播消息发向该频道
|
||||
|
||||
@@ -432,12 +432,11 @@ class ChatControllerTest extends TestCase
|
||||
$response = $this->actingAs($user)->get(route('chat.room', $room->id));
|
||||
|
||||
$response->assertOk();
|
||||
$response->assertSee('⚠️ 警告', false);
|
||||
$response->assertSee('🔇 禁言', false);
|
||||
$response->assertSee('⛔ 封号', false);
|
||||
$response->assertDontSee('🚫 踢出', false);
|
||||
$response->assertDontSee('🌐 封IP', false);
|
||||
$response->assertDontSee('🧊 冻结', false);
|
||||
$response->assertSee('警告', false);
|
||||
$response->assertSee('禁言', false);
|
||||
$response->assertSee('封号', false);
|
||||
$response->assertDontSee('踢出', false);
|
||||
$response->assertDontSee('封IP', false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user