設為首頁收藏本站

                      LUPA開源社區

                       找回密碼
                       注冊
                      文章 帖子 博客
                      LUPA開源社區 首頁 業界資訊 軟件追蹤 查看內容

                      acl 3.5.0發布,跨平臺網絡通信與服務器開發框架

                      2019-3-10 10:51| 發布者: joejoe0332| 查看: 230| 評論: 0|原作者: oschina|來自: oschina

                      摘要: acl 包括以下豐富的常用函數庫: 1、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通信模式、觸發器模式以及協程模式 2、網絡通信庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫通過嵌入 polarssl 而具 ...

                      acl 包括以下豐富的常用函數庫:
                      1、服務器框架:包括進程池模式、線程池模式、非阻塞模式、UDP通信模式、觸發器模式以及協程模式
                      2、網絡通信庫:阻塞/非阻塞網絡 IO 庫(其中 lib_acl_cpp 庫通過嵌入 polarssl 而具備了 SSL 通信能力)
                      3、HTTP 網絡庫:HTTP 客戶端/服務端庫,HTTP 服務端支持 HttpServlet 接口訪問方式;支持 HTTP cookies/session;HTTP 客戶端支持連接池及連接池集群;支持 Websocket
                      4、redis 客戶端庫:實現了 redis 客戶端命令中 12 個大類中的總共 150 多個命令,支持連接池及集群連接池方式
                      5、常見網絡應用庫: SMTP 客戶端庫/PING 庫/DNS 解析庫/memcache 客戶端庫/handler socket 客戶端庫/beanstalk 客戶端庫/disque 客戶端庫
                      6、郵件解析庫:mime解析庫/RFC2047/RFC2048/mime base64/mime qp/mime uucode 等
                      7、事件引擎:支持 select、poll(for unix)、epoll(for linux)、kqueue(for bsd)、devpoll(for solaris)、iocp(for win32)、win32 窗口消息(for win32)事件引擎
                      8、通用連接池庫:高效的連接池基礎類庫,支持豐富的功能
                      9、數據庫客戶端庫:對原生的數據庫客戶端庫進行了二次封裝,使編程更為簡易,功能更為豐富,支持連接池及連接池集群管理功能
                      10、xml/json 流式解析庫:區別于網上其它已有的 xml/json 解析庫,acl 中的 xml/json 解析庫采用有限狀態機方式解析數據,處理方式更為靈活
                      11、網絡協程庫:該庫將阻塞 IO 模式在底層通過上下文切換和事件觸發方式轉變為非阻塞模式,從而方便程序員快速編寫高并發、高性能的網絡服務
                      12、支持將 C++ struct 對象序列化與反序列化(序列化為 Json 對象及由 Json 對象反序列化)

                      示例:
                      1、lib_acl/samples: 該目錄下有大量的基于 lib_acl C 庫的示例
                      2、lib_protocol/samples: 該目錄下有大量的基于 lib_protocol C 庫的示例
                      3、lib_acl_cpp/samples: 該目錄下有大量的基于 lib_acl_cpp C++ 庫的示例
                      4、lib_fiber/samples:該目錄下有大量的基于協程的網絡客戶端/服務端示例

                      應用:
                      1、app/master: 該目錄為 acl 服務容器(acl_master)及常用工具
                      2、app/redis_tools: 該目錄下為 redis 集群管理、監控及智能創建工具
                      3、app/wizard:用來自動生成 acl 服務器框架的向導程序
                      4、app/master_dispatch:用于管理和分發客戶端連接的服務程序
                      5、app/gid:用來產生全局唯一整型 ID 的服務程序及客戶端庫
                      6、app/wizard_demo:為一些服務器測試程序
                      7、app/gson:json 序列化及反序列化代碼生成工具

                      本次升級為大版本升級,主要有以下改進:
                      1、網絡協程庫功能更加豐富、更加穩定,具備應用于復雜業務場景的能力;
                      2、完全支持 IPV6,內部自動識別 IPV4/IPV6 環境并自動適配;
                      3、Redis 客戶端庫支持 Redis5 stream 功能;
                      4、支持使用 Android Studio 3.3.2。
                      此外,還包括大量的新功能特性及問題修復。具體內容如下:

                      一、基礎 C 庫:lib_acl
                      .feature: acl_scan_dir.c 在掃描過程中為每個目錄添加目錄屬性,以便于應用可以獲得目錄的訪問時間等屬性
                      .feature: acl_scan_dir.c 中在掃描目錄過程中,如果遇到出錯情況則會繼續掃描下一個,以免提前結束掃描
                      .feature: acl_scan_dir.c 增加掃描過程中刪除空目錄功能,例子參照:scan_rmdir
                      .feature: acl_udp_server.c 增加配置項 udp_fatal_on_bind_err 來決定當無法綁定地址時,進程是否需要自動崩潰
                      .feature: acl_aio_server.c, acl_single_server.c, acl_threads_server.c, acl_trigger_server.c, acl_udp_server.c 支持進程崩潰時所產生 core 文件的大小,以及進程退出前可禁止產生 core 文件
                      .feature: acl_udp_server.c 可以通過配置項 master_reuseport 決定是否需要綁定地址
                      .feature: acl_bind_udp() 在綁定 UNIX 域套接口時不再需要有 @udp 后綴,內部會自動進行判斷是否是 UNIX 域套接口
                      .feature: 新增函數 acl_socket_alive 用來檢測所給套接字是否正常
                      .feature: 當創建監聽套接口時通過新增標志位 ACL_INET_FLAG_EXCLUSIVE 來控制是否禁止地址復用,默認是允許地址復用
                      .feature: acl_cache2.c 中 acl_cache2_enter 在添加新元素時,如果緩沖區滿則按 LRU 算法將最老的元素刪除,以保證緩沖區空間大小
                      .feature: 網絡通信及域名解析全面支持 IPV6!

                      .bugfix: acl_threads_server.c,在 client_wakeup() 中調用 acl_access_permit() 時如果該函數返回 0 后再調用 ctx->serv_close() 時會導致服務崩潰,原因是調用 serv_close 中的參數順序不對
                      .bugfix: acl_udp_server.c 中 server_binding 綁定失敗時不應放在事件監控中
                      .bugfix: acl_json_utio.c, acl_json_build() 當數組成員為字符串類型時,應允許空串的存在
                      .bugfix: acl_udp_server.c, server_open() 在打開多個流對象時未將數組索引遞增,導致無法綁定多個地址
                      .bugfix: acl_inet_connect.c 中 acl_inet_connect_ex 函數不支持地址為域名
                      .bugfix: acl_host_port.c 中不支持只有 port 的解析方式
                      .bugfix: acl_cache2.c 中 acl_cache2_update 的過期時間添加有誤
                      .bugfix: acl_ifconf.c 中的 acl_ifconf_search 修正幾處地址匹配模式問題
                      .bugfix: acl_json_parse.c 在分析 Json 數據時,針對字符串對象,如果字符串值的開始部分為空格,則會被過濾掉,此問題已修復
                      .bugfix: acl_json_parse.c 不能處理空數組的情況
                      .bugfix: acl_write_wait.c 中使用 poll 方法時,針對 POLLHUP, POLLERR 應直接返回正常,讓 write 函數觸發異常行為

                      二、基礎網絡協議庫:lib_protocol

                      三、c++ 庫:lib_acl_cpp
                      .feature: scan_dir.cpp 增加刪除空目錄功能
                      .feature: thread::start() 增加同步啟動線程的控制參數;在異步創建線程時,如果創建者想通過 thread::thread_id() 獲得新線程的線程 ID 號時,原來的方式還有等待過程導致 1 秒延遲返回,現在通過 tbox 方式可以"立即"獲得線程 ID 號
                      .feature: http_request/http_client 類以 socket_stream 為參數的構造方法中,增加控制參數 stream_fixed,決定當對象銷毀時是否自動將 socket_stream 對象一起銷毀
                      .feature: connect_pool 支持放置非自己創建的連接對象,同時支持在 peek 連接時,僅從已有的連接中提取而不是創建新的連接
                      .feature: connect_manager 連接池管理器可以更好地支持協程的多線程模式,使用者僅需調用 connect_manager::bind_thread(true) 即可
                      .feature: redis_stream 功能模塊支持 Redis5 stream 功能
                      .feature: master_thread.cpp 增加 task_qlen() 方便用戶獲得當前線程池任務隊列中積壓的任務數; 增 threads_pool() 方法用來獲得 lib_acl C 庫中的線程池句柄
                      .feature: redis_client, redis_client_pool 在非集群模式下創建連接時自動選擇db
                      .feature: websocket::send_frame_data 在被循環調用時需檢查長度是否一致,且需要根據實際寫入的幀長度設置掩碼
                      .feature: server_socket 構造方法分開多個,避免使用時產生歧義
                      .feature: master_udp 增加 proc_on_unbind 虛方法,用于當套接口關閉前的回調
                      .feature: acl::string 添加 end_with 方法
                      .feature: server_socket 類的構造函數中新增標志位 OPEN_FLAG_EXCLUSIVE 用來控制創建監聽套接口是否禁止地址復用,缺省是允許地址復用
                      .feature: acl::socket_stream 增加 sock_type 來判斷 socket 類型
                      .feature: 添加 sqlite_cursor 類,從而使 db_sqlite 支持 Sqlite 游標功能
                      .feature: 添加 token_tree 類,該類封裝了 C 版的 256 叉匹配樹算法
                      .feature: tbox 模板類允許傳遞空消息對象
                      .feature: acl::string 支持更多與 std::string 之間的互相操作
                      .feature: acl::fstream 增加文件鎖方法
                      .feature: tbox 類完全由 C++ 模板類實現,不再依賴于 C 版中的消息隊列,代碼更簡潔清晰
                      .feature: thread_cond 類中的 wait 方法參加參數 locked,內部會先判斷該參數決定是否需要加鎖
                      .feature: connect_monitor 類增加三個虛方法:on_connected, on_refused, on_timeout
                      .feature: redis_client_cluster 增加新方法 get_password/get_passwords
                      .feature: connect_manager 增加 check_idle 用來檢測并釋放過期空閑連接

                      .bugfix: scan_dir.cpp 當掃描的節點為目錄時給的路徑有誤
                      .bugfix: connect_manager::check_idle() 當 pools_size 為 0 時應該直接返回
                      .bugfix: websocket::read_frame_data 被循環調用時,掩碼使用方式有誤
                      .bugfix: WebSocketServlet.cpp 中有多個成員變量未初始化
                      .bugfix: master_aio/master_threads 在添加 server_socket 時,應該加鎖
                      .bugfix: master_udp::service_on_bind 被多線程同時調用時,需要對成員變量 sstream_ 加鎖保護
                      .bugfix: db_mysql.cpp, 如果在執行操作的時候,發現跟mysql已經斷開鏈接了,就會重連,萬一在連接時間內都沒有重連成功,就會釋放掉MYSQL*指針,造成這個連接對象永不可用了。因為dbmysql::sane_mysql_query函數判斷conn_為null就直接返回了
                      --- young_hb
                      .bugfix: gson_helper.ipp 在處理空數組時有誤
                      .bugfix: json 序列化工具對 double/float 類型且值不帶小數部分時的支持不夠完善,通過在 acl::json_node::is_double 增加針對整數的支持得以解決
                      .bugfix: acl::HttpServlet 當 session 對象內部創建時,需在析構函數里將其釋放,否則會造成內存泄露
                      .bugfix: acl::thread 線程對象被創建時,默認采用非分離狀態,以便于和操作系統的 API 行為相近,原來采用的是分離狀態
                      .bugfix: redis_key::renamenx 返回值類型有誤

                      四、網絡協程庫:lib_fiber
                      .feature: 增加 tcp_keeper 類用來預創建 TCP 連接及連接保持,減少 TCP 三次握手造成的時延影響
                      .feature: 添加 fiber_cond.c 可用于協程和線程之間的條件變量
                      .feature: fiber_event.c 增加控制參數,可用于協程之間、線程之間及協程與線程之間的互斥
                      .feature: fiber_server.c 支持所生成 core 文件的大小及進程退出時不產生 core
                      .feature: 增加 fiber_tbox 類,可以在協程之間、線程之間及協程與線程之間傳遞對象

                      .bugfix: acl_fiber_cond.c 中 acl_fiber_cond_timedwait 和 acl_fiber_cond_wait 在釋放 fbase 對象時,必須在調用 acl_fiber_event_wait 之前,否則會引起句柄被
                      提前關閉問題
                      .bugfix: acl_fiber_cond.c 中如果多個線程調用同一個條件變量的的 acl_fiber_cond_timedwait 方法時,可能會存在超時值失效的情況
                      .bugfix: fiber_server.cpp 當有連接未斷開時,進程無法正常退出
                      .bugfix: fbase_event.c 中 fbase_event_wakeup/fbase_event_wait IO 如果遇到中斷信號,應該需要重啟 IO 過程
                      .bugfix: fiber_event.c 的方法 acl_fiber_event_notify 中需要用線程鎖對等待隊列(event->waiters)和原子數(event->atomic)進行保護,否則中間會有時間間隙,導致加鎖等待者(調用acl_fiber_event_wait)永久等待
                      .bugfix: fiber_event.c 修復鎖競爭問題
                      .bugfix: fiber_event.c 中的鎖存在幾處鎖競爭失效問題
                      .bugfix: event_iocp.c 中的 iocp_check 方法中的一處斷言有問題 -- [email protected]
                      .bugfix: getaddrinfo.c 修復一處 IPV6 相關問題
                      .bugfix: 使用 poll 方法時,在初始化參數時不需要設置 POLLERR, POLLHUP
                      .bugfix: acl_fiber_gethostbyname 在協程模式下是不安全的,會存在多個協程共用一個線程局部變量的問題,從而導致內存解析失敗,解決方式是使用協程局部變量

                      軟件下載鏈接:https://gitee.com/acl-dev/acl


                      酷斃

                      雷人

                      鮮花

                      雞蛋

                      漂亮
                      • 快畢業了,沒工作經驗,
                        找份工作好難啊?
                        趕緊去人才芯片公司磨練吧!!

                      最新評論

                      關于LUPA|人才芯片工程|人才招聘|LUPA認證|LUPA教育|LUPA開源社區 ( 浙B2-20090187  

                      返回頂部
                      双色球中奖图片

                                                              200所国家优质高职 江西十一选五多乐彩奖号走势图 捕鱼来了最强副炮 北京11选五5开奖结果查询 极速时时上必发票 福彩快三大全下载 广东时时11选5直播 北京十一选五任五必中 七星彩走势图彩经网 河北十一选五专家预测号