瀏覽代碼

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

master
SisMaker 1 年之前
父節點
當前提交
ffd23d7c7d
共有 3 個檔案被更改,包括 22 行新增5 行删除
  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 查看文件

@ -4,8 +4,8 @@
-define(agBeamPool, agBeamPool). -define(agBeamPool, agBeamPool).
-define(agBeamAgency, agBeamAgency). -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(AgUndef, 0). %% Wait One Chunk start
-define(AgCHeader, 1). %% Wait One Chunk header -define(AgCHeader, 1). %% Wait One Chunk header
@ -15,9 +15,6 @@
-define(AgCDone, 5). %% receve one Chunk done -define(AgCDone, 5). %% receve one Chunk done
-define(AgMDone, 6). %% receve one message 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(AgMBIdx, 4).
-define(AgCCIdx, 3). -define(AgCCIdx, 3).
-define(AgTRIdx, 2). -define(AgTRIdx, 2).

+ 10
- 0
src/agVstCli/agSslAgency.erl 查看文件

@ -68,6 +68,7 @@ moduleInit(Parent, Args) ->
{200, _BodyMap, _HeaderMap} -> {200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize}, NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}), proc_lib:init_ack(Parent, {ok, self()}),
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
?MODULE:loop(Parent, NewSrvState, CliState); ?MODULE:loop(Parent, NewSrvState, CliState);
_Err -> _Err ->
proc_lib:init_ack(Parent, {error, _Err}), proc_lib:init_ack(Parent, {error, _Err}),
@ -196,6 +197,15 @@ handleMsg({'$gen_call', FromTag, '$SrvInfo'}, SrvState, CliState) ->
{To, Tag} = FromTag, {To, Tag} = FromTag,
catch To ! {Tag, {erlang:get(), SrvState, CliState}}, catch To ! {Tag, {erlang:get(), SrvState, CliState}},
{ok, 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) -> handleMsg(Msg, #srvState{serverName = ServerName} = SrvState, CliState) ->
?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]), ?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]),
{ok, SrvState, CliState}. {ok, SrvState, CliState}.

+ 10
- 0
src/agVstCli/agTcpAgency.erl 查看文件

@ -68,6 +68,7 @@ moduleInit(Parent, Args) ->
{200, _BodyMap, _HeaderMap} -> {200, _BodyMap, _HeaderMap} ->
NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize}, NewSrvState = SrvState#srvState{dbName = DbName, reConnState = agAgencyUtils:resetReConnState(ReConnState), socket = Socket, vstSize = VstSize},
proc_lib:init_ack(Parent, {ok, self()}), proc_lib:init_ack(Parent, {ok, self()}),
erlang:start_timer(?agKeepAliveTime, self(), keep_alive),
?MODULE:loop(Parent, NewSrvState, CliState); ?MODULE:loop(Parent, NewSrvState, CliState);
_Err -> _Err ->
proc_lib:init_ack(Parent, {error, _Err}), proc_lib:init_ack(Parent, {error, _Err}),
@ -201,6 +202,15 @@ handleMsg({'$gen_call', FromTag, '$SrvInfo'}, SrvState, CliState) ->
{To, Tag} = FromTag, {To, Tag} = FromTag,
catch To ! {Tag, {erlang:get(), SrvState, CliState}}, catch To ! {Tag, {erlang:get(), SrvState, CliState}},
{ok, 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) -> handleMsg(Msg, #srvState{serverName = ServerName} = SrvState, CliState) ->
?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]), ?AgErr(ServerName, "unknown msg: ~p ~p ~p~n", [Msg, SrvState, CliState]),
{ok, SrvState, CliState}. {ok, SrvState, CliState}.

Loading…
取消
儲存