|
@ -3,17 +3,18 @@ |
|
|
-define(agBeamAgency, agBeamAgency). |
|
|
-define(agBeamAgency, agBeamAgency). |
|
|
|
|
|
|
|
|
%% 默认值定义 |
|
|
%% 默认值定义 |
|
|
|
|
|
-define(DEFAULT_BASE_URL, <<"http://120.77.213.39:8529">>). |
|
|
|
|
|
-define(USER_PASSWORD, <<"root:156736">>). |
|
|
-define(DEFAULT_BACKLOG_SIZE, 1024). |
|
|
-define(DEFAULT_BACKLOG_SIZE, 1024). |
|
|
-define(DEFAULT_INIT_OPTS, undefined). |
|
|
-define(DEFAULT_INIT_OPTS, undefined). |
|
|
-define(DEFAULT_CONNECT_TIMEOUT, 500). |
|
|
-define(DEFAULT_CONNECT_TIMEOUT, 500). |
|
|
-define(DEFAULT_IP, "120.77.213.39"). |
|
|
|
|
|
-define(DEFAULT_POOL_SIZE, 16). |
|
|
-define(DEFAULT_POOL_SIZE, 16). |
|
|
-define(DEFAULT_POOL_STRATEGY, random). |
|
|
-define(DEFAULT_POOL_STRATEGY, random). |
|
|
-define(DEFAULT_POOL_OPTIONS, []). |
|
|
-define(DEFAULT_POOL_OPTIONS, []). |
|
|
-define(DEFAULT_IS_RECONNECT, true). |
|
|
-define(DEFAULT_IS_RECONNECT, true). |
|
|
-define(DEFAULT_RECONNECT_MAX, 120000). |
|
|
-define(DEFAULT_RECONNECT_MAX, 120000). |
|
|
-define(DEFAULT_RECONNECT_MIN, 500). |
|
|
-define(DEFAULT_RECONNECT_MIN, 500). |
|
|
-define(DEFAULT_SOCKET_OPTS, []). |
|
|
|
|
|
|
|
|
-define(DEFAULT_SOCKET_OPTS, [binary, {packet, line}, {packet, raw}, {send_timeout, 50}, {send_timeout_close, true}]). |
|
|
-define(DEFAULT_TIMEOUT, 5000). |
|
|
-define(DEFAULT_TIMEOUT, 5000). |
|
|
-define(DEFAULT_BODY, undefined). |
|
|
-define(DEFAULT_BODY, undefined). |
|
|
-define(DEFAULT_HEADERS, []). |
|
|
-define(DEFAULT_HEADERS, []). |
|
@ -34,13 +35,11 @@ |
|
|
reply :: term() |
|
|
reply :: term() |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-record(dbUrl, { |
|
|
|
|
|
host :: host(), |
|
|
|
|
|
path :: path(), |
|
|
|
|
|
port :: 0..65535, |
|
|
|
|
|
hostname :: hostname(), |
|
|
|
|
|
protocol :: httpType(), |
|
|
|
|
|
poolName :: atom() %% 请求该URL用到的poolName |
|
|
|
|
|
|
|
|
-record(request, { |
|
|
|
|
|
requestId :: requestId(), |
|
|
|
|
|
pid :: pid() | undefined, |
|
|
|
|
|
timeout :: timeout(), |
|
|
|
|
|
timestamp :: erlang:timestamp() |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-record(requestRet, { |
|
|
-record(requestRet, { |
|
@ -52,13 +51,6 @@ |
|
|
status_code :: undefined | 100..505 |
|
|
status_code :: undefined | 100..505 |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-record(request, { |
|
|
|
|
|
requestId :: requestId(), |
|
|
|
|
|
pid :: pid() | undefined, |
|
|
|
|
|
timeout :: timeout(), |
|
|
|
|
|
timestamp :: erlang:timestamp() |
|
|
|
|
|
}). |
|
|
|
|
|
|
|
|
|
|
|
-record(httpParam, { |
|
|
-record(httpParam, { |
|
|
headers = [] :: [binary()], |
|
|
headers = [] :: [binary()], |
|
|
body = undefined :: undefined | binary(), |
|
|
body = undefined :: undefined | binary(), |
|
@ -66,16 +58,10 @@ |
|
|
timeout = 1000 :: non_neg_integer() |
|
|
timeout = 1000 :: non_neg_integer() |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-record(poolOpts, { |
|
|
|
|
|
poolSize :: poolSize(), |
|
|
|
|
|
backlogSize :: backlogSize(), |
|
|
|
|
|
poolStrategy :: poolStrategy() |
|
|
|
|
|
}). |
|
|
|
|
|
|
|
|
|
|
|
-record(reconnectState, { |
|
|
-record(reconnectState, { |
|
|
min :: time(), |
|
|
|
|
|
max :: time() | infinity, |
|
|
|
|
|
current :: time() | undefined |
|
|
|
|
|
|
|
|
min :: non_neg_integer(), |
|
|
|
|
|
max :: non_neg_integer() | infinity, |
|
|
|
|
|
current :: non_neg_integer() | undefined |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-record(cliState, { |
|
|
-record(cliState, { |
|
@ -83,60 +69,68 @@ |
|
|
requestsOut = 0 :: non_neg_integer(), |
|
|
requestsOut = 0 :: non_neg_integer(), |
|
|
binPatterns :: tuple(), |
|
|
binPatterns :: tuple(), |
|
|
buffer = <<>> :: binary(), |
|
|
buffer = <<>> :: binary(), |
|
|
response :: requestRet() | undefined |
|
|
|
|
|
|
|
|
response :: requestRet() | undefined, |
|
|
|
|
|
backlogNum = 0 :: integer(), |
|
|
|
|
|
backlogSize :: integer() |
|
|
}). |
|
|
}). |
|
|
|
|
|
|
|
|
-type cliState() :: #cliState{}. |
|
|
|
|
|
|
|
|
-record(poolOpts, { |
|
|
|
|
|
host :: host(), |
|
|
|
|
|
port :: 0..65535, |
|
|
|
|
|
hostname :: string(), |
|
|
|
|
|
protocol :: protocol(), |
|
|
|
|
|
userPassword :: binary(), |
|
|
|
|
|
poolSize ::binary() |
|
|
|
|
|
}). |
|
|
|
|
|
|
|
|
|
|
|
-type miAgHttpCliRet() :: #miAgHttpCliRet{}. |
|
|
|
|
|
-type request() :: #request{}. |
|
|
-type requestRet() :: #requestRet{}. |
|
|
-type requestRet() :: #requestRet{}. |
|
|
-type dbUrl() :: #dbUrl {}. |
|
|
|
|
|
-type error() :: {error, term()}. |
|
|
|
|
|
-type headers() :: [{iodata(), iodata()}, ...]. |
|
|
|
|
|
-type host() :: binary(). |
|
|
|
|
|
-type hostname() :: binary(). |
|
|
|
|
|
-type path() :: binary(). |
|
|
|
|
|
|
|
|
-type httpParam() :: #httpParam{}. |
|
|
|
|
|
-type cliState() :: #cliState{}. |
|
|
|
|
|
-type reconnectState() :: #reconnectState{}. |
|
|
|
|
|
|
|
|
|
|
|
-type poolName() :: atom(). |
|
|
|
|
|
-type serverName() :: atom(). |
|
|
|
|
|
-type protocol() :: ssl | tcp. |
|
|
-type method() :: binary(). |
|
|
-type method() :: binary(). |
|
|
-type httpType() :: http | https. |
|
|
|
|
|
|
|
|
-type headers() :: [{iodata(), iodata()}]. |
|
|
-type body() :: iodata() | undefined. |
|
|
-type body() :: iodata() | undefined. |
|
|
-type options() :: [option(), ...]. |
|
|
|
|
|
-type option() :: |
|
|
|
|
|
{backlogSize, pos_integer()} | |
|
|
|
|
|
{poolSize, pos_integer()} | |
|
|
|
|
|
{poolStrategy, random | round_robin} | |
|
|
|
|
|
{reconnect, boolean()} | |
|
|
|
|
|
{reconnectTimeMin, pos_integer()} | |
|
|
|
|
|
{reconnectTimeMax, pos_integer() | infinity}. |
|
|
|
|
|
|
|
|
-type path() :: binary(). |
|
|
|
|
|
-type host() :: binary(). |
|
|
|
|
|
-type poolSize() :: pos_integer(). |
|
|
|
|
|
-type backlogSize() :: pos_integer() | infinity. |
|
|
|
|
|
-type requestId() :: {serverName(), reference()}. |
|
|
|
|
|
-type externalRequestId() :: term(). |
|
|
|
|
|
-type response() :: {externalRequestId(), term()}. |
|
|
|
|
|
-type socket() :: inet:socket() | ssl:sslsocket(). |
|
|
|
|
|
-type error() :: {error, term()}. |
|
|
|
|
|
|
|
|
-type httpParam() :: #httpParam{}. |
|
|
|
|
|
|
|
|
-type poolCfg() :: |
|
|
|
|
|
{baseUrl, binary()} | |
|
|
|
|
|
{user, binary()} | |
|
|
|
|
|
{password, binary()} | |
|
|
|
|
|
{poolSize, poolSize()}. |
|
|
|
|
|
|
|
|
-type backlogSize() :: pos_integer() | infinity. |
|
|
|
|
|
-type request() :: #request{}. |
|
|
|
|
|
-type clientOpt() :: |
|
|
|
|
|
{ip, inet:ip_address() | inet:hostname()} | |
|
|
|
|
|
{port, inet:port_number()} | |
|
|
|
|
|
{protocol, protocol()} | |
|
|
|
|
|
|
|
|
-type agencyOpt() :: |
|
|
{reconnect, boolean()} | |
|
|
{reconnect, boolean()} | |
|
|
{reconnectTimeMin, time()} | |
|
|
|
|
|
{reconnectTimeMax, time() | infinity} | |
|
|
|
|
|
|
|
|
{backlogSize, backlogSize()} | |
|
|
|
|
|
{reconnectTimeMin, pos_integer()} | |
|
|
|
|
|
{reconnectTimeMax, pos_integer()} | |
|
|
{socketOpts, [gen_tcp:connect_option(), ...]}. |
|
|
{socketOpts, [gen_tcp:connect_option(), ...]}. |
|
|
|
|
|
|
|
|
-type clientOpts() :: [clientOpt(), ...]. |
|
|
|
|
|
-type clientState() :: term(). |
|
|
|
|
|
-type externalRequestId() :: term(). |
|
|
|
|
|
-type poolName() :: atom(). |
|
|
|
|
|
-type poolOpt() :: |
|
|
|
|
|
{poolSize, poolSize()} | |
|
|
|
|
|
{backlogSize, backlogSize()} | |
|
|
|
|
|
{poolstrategy, poolStrategy()}. |
|
|
|
|
|
|
|
|
-type poolCfgs() :: [poolCfg()]. |
|
|
|
|
|
-type poolOpts() :: #poolOpts{}. |
|
|
|
|
|
-type agencyOpts() :: [agencyOpt()]. |
|
|
|
|
|
|
|
|
|
|
|
-record(dbUrl, { |
|
|
|
|
|
host :: host(), |
|
|
|
|
|
path :: path(), |
|
|
|
|
|
port :: 0..65535, |
|
|
|
|
|
hostname :: string(), |
|
|
|
|
|
protocol :: protocol(), |
|
|
|
|
|
poolName :: atom() %% 请求该URL用到的poolName |
|
|
|
|
|
}). |
|
|
|
|
|
|
|
|
|
|
|
-type dbUrl() :: #dbUrl{}. |
|
|
|
|
|
|
|
|
-type poolOpts() :: [poolOpt()]. |
|
|
|
|
|
-type poolOptsRec() :: #poolOpts{}. |
|
|
|
|
|
-type poolSize() :: pos_integer(). |
|
|
|
|
|
-type poolStrategy() :: random | round_robin. |
|
|
|
|
|
-type protocol() :: ssl | tcp. |
|
|
|
|
|
-type reconnectState() :: #reconnectState{}. |
|
|
|
|
|
-type requestId() :: {serverName(), reference()}. |
|
|
|
|
|
-type response() :: {externalRequestId(), term()}. |
|
|
|
|
|
-type serverName() :: atom(). |
|
|
|
|
|
-type socket() :: inet:socket() | ssl:sslsocket(). |
|
|
|
|
|
-type socketType() :: inet | ssl. |
|
|
|
|
|
-type time() :: pos_integer(). |
|
|
|