Browse Source

ft: 连接池的进程加上续期操作

master
SisMaker 1 year ago
parent
commit
ffd23d7c7d
3 changed files with 22 additions and 5 deletions
  1. +2
    -5
      include/agVstCli.hrl
  2. +10
    -0
      src/agVstCli/agSslAgency.erl
  3. +10
    -0
      src/agVstCli/agTcpAgency.erl

+ 2
- 5
include/agVstCli.hrl View File

@ -4,8 +4,8 @@
-define(agBeamPool, agBeamPool).
-define(agBeamAgency, agBeamAgency).
-define(agMessageId, agMessageId).
-define(agMaxMessageId, 576460752303423486).
%% HTTP keep-alive-timeout(300)
-define(agKeepAliveTime, 3600000).
-define(AgUndef, 0). %% Wait One Chunk start
-define(AgCHeader, 1). %% Wait One Chunk header
@ -15,9 +15,6 @@
-define(AgCDone, 5). %% receve one Chunk done
-define(AgMDone, 6). %% receve one message done
%% pidFrom pid() to reply; undefiend discard; timeOut discard
-record(msgIdCache, {pidFrom, timerRef, chunkCnt, msgBuffer}).
-define(AgMBIdx, 4).
-define(AgCCIdx, 3).
-define(AgTRIdx, 2).

+ 10
- 0
src/agVstCli/agSslAgency.erl View File

@ -68,6 +68,7 @@ moduleInit(Parent, Args) ->
{200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}),
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
?MODULE:loop(Parent, NewSrvState, CliState);
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
@ -196,6 +197,15 @@ handleMsg({'$gen_call', FromTag, '$SrvInfo'}, SrvState, CliState) ->
{To, Tag} = FromTag,
catch To ! {Tag, {erlang:get(), SrvState, CliState}},
{ok, SrvState, CliState};
handleMsg({timeout, _TimerRef, keep_alive}, #srvState{socket = Socket} = SrvState, #cliState{backlogNum = BacklogNum} = CliState) ->
case Socket /= undefined andalso BacklogNum =< 0 of
true ->
self() ! #agReq{method = ?AgGet, path = <<"/_admin/time">>, queryPars = ?AgDefQuery, headers = ?AgDefHeader, body = ?AgDefBody, messageId = agVstCli:getMsgId(), fromPid = undefined, overTime = infinity, isSystem = false};
_ ->
ignore
end,
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
{ok, SrvState, CliState};
handleMsg(Msg, #srvState{serverName = ServerName} = SrvState, CliState) ->
?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]),
{ok, SrvState, CliState}.

+ 10
- 0
src/agVstCli/agTcpAgency.erl View File

@ -68,6 +68,7 @@ moduleInit(Parent, Args) ->
{200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}),
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
?MODULE:loop(Parent, NewSrvState, CliState);
_Err ->
proc_lib:init_ack(Parent, {error, _Err}),
@ -201,6 +202,15 @@ handleMsg({'$gen_call', FromTag, '$SrvInfo'}, SrvState, CliState) ->
{To, Tag} = FromTag,
catch To ! {Tag, {erlang:get(), SrvState, CliState}},
{ok, SrvState, CliState};
handleMsg({timeout, _TimerRef, keep_alive}, #srvState{socket = Socket} = SrvState, #cliState{backlogNum = BacklogNum} = CliState) ->
case Socket /= undefined andalso BacklogNum =< 0 of
true ->
self() ! #agReq{method = ?AgGet, path = <<"/_admin/time">>, queryPars = ?AgDefQuery, headers = ?AgDefHeader, body = ?AgDefBody, messageId = agVstCli:getMsgId(), fromPid = undefined, overTime = infinity, isSystem = false};
_ ->
ignore
end,
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
{ok, SrvState, CliState};
handleMsg(Msg, #srvState{serverName = ServerName} = SrvState, CliState) ->
?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]),
{ok, SrvState, CliState}.

Loading…
Cancel
Save