From 98941e6293084bc3db7636481e6c972ac2f465ac Mon Sep 17 00:00:00 2001 From: maike Date: Wed, 23 Sep 2020 18:48:25 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- include/agHttpCli.hrl | 20 ++++++++++---------- src/agHttpCli/agAgencyPoolMgrIns.erl | 4 ++-- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e576e3e..ac71303 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,12 @@ ## 特点 高效,快速,简单易用。 - 1. 为了该驱动尽可能的高效,定制化封装了一个带连接池的http1.1的客户端(agHttpCli) + 1. 为了该驱动尽可能的高效,定制化封装了一个带连接池的http1.1的客户端(agHttpCli) 封装的agHttpCli与同类http客户端测试对比可参考:https://github.com/SisMaker/httpc_bench 2. 为了更加快速的decode和encode json数据,json库引入了jiffy,经过测试jiffy效率还是很不错的。 3. 该驱动可以使用连接池,也可以仅仅在单进程(非连接池模式)建立多个连接进行各种数据操作。使用连接池时支持同步与异步操作,如果要使用异步操作需要额外保存requestId 等待接收数据返回,当前改驱动封装的API均使用同步操作,如果需要异步操作可自行修改。单进程操作时仅支持同步操作。 - 单进程模式下相对连接池模式可以减少一次数据在进程间的复制,对于大量数据的操作,可以考虑在数据管理进程单独建立数据库连接,而不用连接池。 + 单进程模式下相对连接池模式可以减少一次数据在进程间的复制,对于大量数据的操作,可以考虑在数据管理进程单独建立数据库连接,而不用连接池。 4. 连接池模式和非连接池模式API接口保证了同一性,不用区别对待, 易于理解和连接池模式和非连接池模式相互转换修改。 ## 暂不支持批处理请求 diff --git a/include/agHttpCli.hrl b/include/agHttpCli.hrl index 980938e..f789adb 100644 --- a/include/agHttpCli.hrl +++ b/include/agHttpCli.hrl @@ -5,7 +5,7 @@ -define(agBeamPool, agBeamPool). -define(agBeamAgency, agBeamAgency). -%% 默认值定义 +%% 默认选项定义 -define(DEFAULT_BASE_URL, <<"http://127.0.0.1:8529">>). -define(DEFAULT_DBNAME, <<"_system">>). -define(DEFAULT_USER, <<"root">>). @@ -42,15 +42,6 @@ reply :: term() }). --record(recvState, { - stage = header :: header | body | done, %% 一个请求收到tcp可能会有多个包 最多分三个阶接收 - contentLength :: undefined | non_neg_integer() | chunked, - statusCode :: undefined | 100..505, - headers :: undefined | [binary()], - buffer = <<>> :: binary(), - body = <<>> :: binary() -}). - -record(reconnectState, { min :: non_neg_integer(), max :: non_neg_integer() | infinity, @@ -70,6 +61,15 @@ timerRef :: undefined | reference() }). +-record(recvState, { + stage = header :: header | body | done, %% 一个请求收到http(底层是tcp)回复可能会有多个包 最多分三个阶接收 + contentLength :: undefined | non_neg_integer() | chunked, + statusCode :: undefined | 100..505, + headers :: undefined | [binary()], + buffer = <<>> :: binary(), + body = <<>> :: binary() +}). + -record(cliState, { isHeadMethod = false :: boolean(), %% 是否是<<"HEAD">>请求方法 %method = undefined :: undefined | method(), diff --git a/src/agHttpCli/agAgencyPoolMgrIns.erl b/src/agHttpCli/agAgencyPoolMgrIns.erl index 202d803..7eacc1b 100644 --- a/src/agHttpCli/agAgencyPoolMgrIns.erl +++ b/src/agHttpCli/agAgencyPoolMgrIns.erl @@ -52,8 +52,8 @@ handleMsg(_Msg, State) -> {ok, State}. terminate(_Reason, _State) -> - ets:delete_all_objects(?ETS_AG_Pool), - ets:delete_all_objects(?ETS_AG_Agency), + ets:delete(?ETS_AG_Pool), + ets:delete(?ETS_AG_Agency), agKvsToBeam:load(?agBeamPool, []), agKvsToBeam:load(?agBeamAgency, []), ok.