%% beam cache 模块名
|
|
-define(agBeamPool, agBeamPool).
|
|
-define(agBeamAgency, agBeamAgency).
|
|
|
|
%% 默认值定义
|
|
-define(DEFAULT_BACKLOG_SIZE, 1024).
|
|
-define(DEFAULT_INIT_OPTS, undefined).
|
|
-define(DEFAULT_CONNECT_TIMEOUT, 500).
|
|
-define(DEFAULT_PORT, 80).
|
|
-define(DEFAULT_IP, <<"127.0.0.1">>).
|
|
-define(DEFAULT_POOL_SIZE, 16).
|
|
-define(DEFAULT_POOL_STRATEGY, random).
|
|
-define(DEFAULT_POOL_OPTIONS, []).
|
|
-define(DEFAULT_IS_RECONNECT, true).
|
|
-define(DEFAULT_RECONNECT_MAX, 120000).
|
|
-define(DEFAULT_RECONNECT_MIN, 500).
|
|
-define(DEFAULT_SOCKET_OPTS, []).
|
|
-define(DEFAULT_TIMEOUT, 1000).
|
|
-define(DEFAULT_BODY, undefined).
|
|
-define(DEFAULT_HEADERS, []).
|
|
-define(DEFAULT_PID, self()).
|
|
-define(DEFAULT_PROTOCOL, tcp).
|
|
|
|
-define(GET_FROM_LIST(Key, List), case lists:keyfind(Key, 1, List) of false -> undefined; {_, Value} -> Value end).
|
|
-define(GET_FROM_LIST(Key, List, Default), case lists:keyfind(Key, 1, List) of false -> Default; {_, Value} -> Value end).
|
|
|
|
-define(WARN(PoolName, Format, Data), agMiscUtils:warnMsg(PoolName, Format, Data)).
|
|
|
|
-record(dbUrl, {
|
|
host :: host(),
|
|
path :: path(),
|
|
port :: 0..65535,
|
|
hostname :: hostname(),
|
|
protocol :: httpType()
|
|
}).
|
|
|
|
-record(requestRet, {
|
|
state :: body | done,
|
|
body :: undefined | binary(),
|
|
content_length :: undefined | non_neg_integer() | chunked,
|
|
headers :: undefined | [binary()],
|
|
reason :: undefined | binary(),
|
|
status_code :: undefined | 100..505
|
|
}).
|
|
|
|
-record(request, {
|
|
requestId :: requestId(),
|
|
pid :: pid() | undefined,
|
|
timeout :: timeout(),
|
|
timestamp :: erlang:timestamp()
|
|
}).
|
|
|
|
-record(poolOpts, {
|
|
poolSize :: poolSize(),
|
|
backlogSize :: backlogSize(),
|
|
poolStrategy :: poolStrategy()
|
|
}).
|
|
|
|
-record(reconnectState, {
|
|
min :: time(),
|
|
max :: time() | infinity,
|
|
current :: time() | undefined
|
|
}).
|
|
|
|
-type requestRet() :: #requestRet {}.
|
|
-type dbUrl() :: #dbUrl {}.
|
|
-type error() :: {error, term()}.
|
|
-type headers() :: [{iodata(), iodata()}, ...].
|
|
-type host() :: binary().
|
|
-type hostname() :: binary().
|
|
-type path() :: binary().
|
|
-type method() :: binary().
|
|
-type httpType() :: http | https.
|
|
-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 buoy_opts() ::
|
|
#{
|
|
headers => headers(),
|
|
body => body(),
|
|
pid => pid(),
|
|
timeout => non_neg_integer()
|
|
}.
|
|
|
|
-type backlogSize() :: pos_integer() | infinity.
|
|
-type request() :: #request{}.
|
|
-type clientOpt() ::
|
|
{initOpts, term()} |
|
|
{ip, inet:ip_address() | inet:hostname()} |
|
|
{port, inet:port_number()} |
|
|
{protocol, protocol()} |
|
|
{reconnect, boolean()} |
|
|
{reconnectTimeMin, time()} |
|
|
{reconnectTimeMax, time() | infinity} |
|
|
{socketOpts, [gen_tcp:connect_option(), ...]}.
|
|
|
|
-type clientOpts() :: [clientOpt(), ...].
|
|
-type clientState() :: term().
|
|
-type externalRequestId() :: term().
|
|
-type poolName() :: atom().
|
|
-type poolOpt() ::
|
|
{poolSize, pool_size()} |
|
|
{backlogSize, backlog_size()} |
|
|
{poolstrategy, poolStrategy()}.
|
|
|
|
-type poolOpts() :: [poolOpt()].
|
|
-type poolOptsRec() :: #poolOpts{}.
|
|
-type poolSize() :: pos_integer().
|
|
-type poolStrategy() :: random | round_robin.
|
|
-type protocol() :: ssl | tcp.
|
|
-type reconnectState() :: #reconnectState{}.
|
|
-type requestId() :: {server_name(), reference()}.
|
|
-type response() :: {external_request_id(), term()}.
|
|
-type server_name() :: atom().
|
|
-type socket() :: inet:socket() | ssl:sslsocket().
|
|
-type socketType() :: inet | ssl.
|
|
-type time() :: pos_integer().
|