Commit 7cde0c44fafe86df431485731e28473d4f313017
1 parent
5e6af9d6
忽略心跳和未登录状态 超时处理
Showing
2 changed files
with
22 additions
and
7 deletions
Show diff stats
src/agent.lua
@@ -29,12 +29,6 @@ _codeSession = {} | @@ -29,12 +29,6 @@ _codeSession = {} | ||
29 | --- {{{ 定时器相关 | 29 | --- {{{ 定时器相关 |
30 | local function handle_timeout() | 30 | local function handle_timeout() |
31 | if not agentInfo.open_timer then return end | 31 | if not agentInfo.open_timer then return end |
32 | - | ||
33 | - if not agentInfo.role then | ||
34 | - skynet.timeout(100, handle_timeout) | ||
35 | - return | ||
36 | - end | ||
37 | - | ||
38 | agent_util:update(agentInfo) | 32 | agent_util:update(agentInfo) |
39 | skynet.timeout(100, handle_timeout) | 33 | skynet.timeout(100, handle_timeout) |
40 | end | 34 | end |
@@ -274,6 +268,8 @@ function CMD.start(session, source, gate, fd, ip, hotfixs) | @@ -274,6 +268,8 @@ function CMD.start(session, source, gate, fd, ip, hotfixs) | ||
274 | end | 268 | end |
275 | end | 269 | end |
276 | 270 | ||
271 | + start_agent_timer() | ||
272 | + | ||
277 | -- 这里将消息伪装成 watchdog 发出,这样就由 A->B->C->B->A 变成 A->B->C->A | 273 | -- 这里将消息伪装成 watchdog 发出,这样就由 A->B->C->B->A 变成 A->B->C->A |
278 | skynet.redirect(gate, source, "lua", session, skynet.pack("forward", fd, 0, skynet.self())) | 274 | skynet.redirect(gate, source, "lua", session, skynet.pack("forward", fd, 0, skynet.self())) |
279 | end | 275 | end |
src/services/agent_util.lua
@@ -17,15 +17,32 @@ local HEART_TIMEOUT_COUNT_MAX = 20 | @@ -17,15 +17,32 @@ local HEART_TIMEOUT_COUNT_MAX = 20 | ||
17 | local HEART_QUICK_COUNT_MAX = 5 | 17 | local HEART_QUICK_COUNT_MAX = 5 |
18 | -- 心跳定时间隔 | 18 | -- 心跳定时间隔 |
19 | local HEART_TIMER_INTERVAL = 5 | 19 | local HEART_TIMER_INTERVAL = 5 |
20 | +-- 忽略心跳的等待时间 | ||
21 | +local WAIT_IGNORE_HEART = 300 | ||
22 | + | ||
23 | +--开始忽略心跳的时间 | ||
24 | +local ignoreHeartTime = nil | ||
20 | 25 | ||
21 | local function check_heart_beat(agent, now) | 26 | local function check_heart_beat(agent, now) |
22 | -- 充值等操作不检查心跳 | 27 | -- 充值等操作不检查心跳 |
23 | local role = agent.role | 28 | local role = agent.role |
24 | - if role.ignoreHeartbeat then | 29 | + if not role or role.ignoreHeartbeat then |
25 | lastHeartCheckTime = now - HEART_TIMER_INTERVAL | 30 | lastHeartCheckTime = now - HEART_TIMER_INTERVAL |
26 | heartTimeoutCount = 0 | 31 | heartTimeoutCount = 0 |
32 | + | ||
33 | + if not ignoreHeartTime then | ||
34 | + ignoreHeartTime = now | ||
35 | + end | ||
36 | + | ||
37 | + if now - ignoreHeartTime >= WAIT_IGNORE_HEART then -- 等待太久了 踢掉 | ||
38 | + skynet.error("timeout! then agent will shut down by self with ignoreHeartbeat or no login", agent.client_fd) | ||
39 | + skynet.call(agent.gate_serv, "lua", "kick", agent.client_fd) | ||
40 | + ignoreHeartTime = nil | ||
41 | + end | ||
27 | return | 42 | return |
28 | end | 43 | end |
44 | + ignoreHeartTime = nil | ||
45 | + | ||
29 | if lastHeartCheckTime - now > HEART_TIMER_INTERVAL or | 46 | if lastHeartCheckTime - now > HEART_TIMER_INTERVAL or |
30 | now - lastHeartCheckTime > HEART_TIMER_INTERVAL then | 47 | now - lastHeartCheckTime > HEART_TIMER_INTERVAL then |
31 | heartTimeoutCount = heartTimeoutCount + 1 | 48 | heartTimeoutCount = heartTimeoutCount + 1 |
@@ -46,6 +63,7 @@ function _M:update(agent) | @@ -46,6 +63,7 @@ function _M:update(agent) | ||
46 | pcall(check_heart_beat, agent, now) | 63 | pcall(check_heart_beat, agent, now) |
47 | nextCheckTime = now + HEART_TIMER_INTERVAL | 64 | nextCheckTime = now + HEART_TIMER_INTERVAL |
48 | end | 65 | end |
66 | + if not role then return end | ||
49 | pcall(role.onRecoverTimer, role, now) | 67 | pcall(role.onRecoverTimer, role, now) |
50 | end | 68 | end |
51 | 69 | ||
@@ -73,6 +91,7 @@ end | @@ -73,6 +91,7 @@ end | ||
73 | function _M:reset() | 91 | function _M:reset() |
74 | heartTimeoutCount = 0 | 92 | heartTimeoutCount = 0 |
75 | heartQuickCount = 0 | 93 | heartQuickCount = 0 |
94 | + ignoreHeartTime = nil | ||
76 | lastHeartCheckTime = skynet.timex() | 95 | lastHeartCheckTime = skynet.timex() |
77 | end | 96 | end |
78 | 97 |
-
mentioned in commit 46a0db220ccf4acdc740ada8ca8e36d26e838883