ACL跨平台(支持LINUX,WIN32,Solaris,MacOS,FreeBSD)的网络通信库及服务器编程框架

去 GitHub(https://github.com/acl-dev/acl/releases) 上下载最新的版本.

ACL包括以下丰富的常用函数库:
1、服务器框架:包括进程池模式、线程池模式、非阻塞模式、UDP通信模式、触发器模式以及协程模式
2、网络通信库:阻塞/非阻塞网络IO库(其中lib_cpp库通过嵌入Polarssl而具备了ssl通信能力)
3、HTTP网络库:HTTP客户端/服务端库,HTTP服务端支持HttpServlet接口访问方式;支持HTTPcookie/Session;HTTP客户端支持连接池及连接池集群;支持WebSocket
4、redis客户端库:实现了redis客户端命令中12个大类中的总共150多个命令,支持连接池及集群连接池方式
5、常见网络应用库:smtp客户端库/ping库/dns解析库/memcache客户端库/处理程序套接字客户端库/豆柄客户端库/disque客户端库
6、邮件解析库:MIME解析库/RFC 2047/RFC 2048/MIME base 64/MIME qp/MIME uucode等
7、事件引擎:支持选择、轮询(用于Unix)、EPOLL(用于Linux)、kQueue(用于bsd)、devpoll(用于Solaris)、IOCP(用于Win 32)、Win 32窗口消息(用于Win 32)事件引擎
8、通用连接池库:高效的连接池基础类库,支持丰富的功能
9、数据库客户端库:对原生的数据库客户端库进行了二次封装,使编程更为简易,功能更为丰富,支持连接池及连接池集群管理功能
10、xml/json流式解析库:区别于网上其它已有的xml/json解析库,acl中的xml/json解析库采用有限状态机方式解析数据,处理方式更为灵活
11、网络协程库:该库将阻塞IO模式在底层通过上下文切换和事件触发方式转变为非阻塞模式,从而方便程序员快速编写高并发、高性能的网络服务
12、支持将C++struct对象序列化与反序列化(序列化为Json对象及由Json对象反序列化)

示例:
1、lib_acl/该目录下有大量的基于lib_acl C库的示例
2、库协议/示例:该目录下有大量的基于lib_protocol C库的示例
3、lib_acl_cpp/该目录下有大量的基于lib_acl_cpp C++库的示例
4、lib_纤维/样品:该目录下有大量的基于协程的网络客户端/服务端示例

应用:
1、应用程序/主程序:该目录为acl服务容器(Acl_Master)及常用工具
2、app/redis_tools:该目录下为redis集群管理、监控及智能创建工具
3、应用程序/向导:用来自动生成acl服务器框架的向导程序
4、应用程序/主调度:用于管理和分发客户端连接的服务程序
5、app/gid:用来产生全局唯一整型ID的服务程序及客户端库
6、应用程序/向导_演示:为一些服务器测试程序
7、app/gson:json序列化及反序列化代码生成工具

本次升级为大版本升级,主要有以下改进:
1、网络协程库功能更加丰富、更加稳定,具备应用于复杂业务场景的能力;
2、完全支持IPv 6、内部自动识别IPv 4/IPv 6环境并自动适配;
3、redis客户端库支持Redis5功能;
4、支持使用AndroidStudio 3.3.2。
此外,还包括大量的新功能特性及问题修复.具体内容如下:

一、基础C库:LIB_ACL
特征:acl_scan_di.c在扫描过程中为每个目录添加目录属性,以便于应用可以获得目录的访问时间等属性
特征:acl_scan_di.c中在扫描目录过程中,如果遇到出错情况则会继续扫描下一个,以免提前结束扫描
特征:acl_scan_di.c增加扫描过程中删除空目录功能,例子参照:scan_rmdir
特征:acl_udp_server.c增加配置项_来决定当无法绑定地址时,进程是否需要自动崩溃_on_BIND_ERR
.特征:acl_aio_server.c,acl_单机_server.c,acl_文件的大小,以及进程退出前可禁止产生_server.c,acl_文件的大小,以及进程退出前可禁止产生_server.c,acl_udp_server.c,acl_udp_server.c文件的大小,以及进程退出前可禁止产生核心文件
特征:acl_udp_server.c可以通过配置项master_reuseport决定是否需要绑定地址
特性:在绑定_BIND_UDP()域套接口时不再需要有@UDP后缀,内部会自动进行判断是否是UNIX域套接口
特征:新增函数acl_Socket_live用来检测所给套接字是否正常
.特征:当创建监听套接口时通过新增标志位acl_iet_来控制是否禁止地址复用,默认是允许地址复用_独占来控制是否禁止地址复用,默认是允许地址复用
特征:acl_cache2.c中acl_cache2_enter在添加新元素时,如果缓冲区满则按lru算法将最老的元素删除,以保证缓冲区空间大小
功能:网络通信及域名解析全面支持IPv 6!

.bugfix:acl_lines_server.c,在Client_Wakeup()中调用acl_access_时如果该函数返回0后再调用ctx->serv_时如果该函数返回()时会导致服务崩溃,原因是调用serv_后再调用中的参数顺序不对
.bugfix:acl_udp_server.c中server_binding绑定失败时不应放在事件监控中
.bugfix:acl_json_utio.c,acl_json_build()当数组成员为字符串类型时,应允许空串的存在
.bugfix:acl_udp_server.c,server_open()在打开多个流对象时未将数组索引递增,导致无法绑定多个地址
.bugfix:acl_inetconnect.c中acl_inc_CONNECT_EX函数不支持地址为域名
.bugfix:acl_host_port.c中不支持只有端口的解析方式
.bugfix:acl_cache2.c中acl_cache2_的过期时间添加有误
.bugfix:acl_ifcon.c中的acl_ifconf_Search修正几处地址匹配模式问题
.bugfix:acl_json_parse.c在分析json数据时,针对字符串对象,如果字符串值的开始部分为空格,则会被过滤掉,此问题已修复
.bugfix:acl_json_parse.c不能处理空数组的情况
.bugfix:ACL_WITH_WAY.c中使用Poll方法时,针对POLLHUP,POLLERR应直接返回正常,让写函数触发异常行为

二、基础网络协议库:LIB协议

三、c++库:Lib_acl_cpp
.特征:扫描_dir.cpp增加删除空目录功能
特性:线程::start()增加同步启动线程的控制参数;在异步创建线程时,如果创建者想通过线程::获得新线程的线程_id()获得新线程的线程ID号时,原来的方式还有等待过程导致1秒延迟返回,现在通过TBox方式可以“立即”获得线程ID号
特性:http_类以/http_Client为参数的构造方法中,增加控制参数_Flow_为参数的构造方法中,增加控制参数_Flow_FIX,决定当对象销毁时是否自动将Socket_Flow对象一起销毁
.特点:CONNECT_POWER支持放置非自己创建的连接对象,同时支持在PEEK连接时,仅从已有的连接中提取而不是创建新的连接
特性:CONNECT_Manager连接池管理器可以更好地支持协程的多线程模式,使用者仅需调用CONNECT_即可::BIND_TEAH(True)即可
.特点:redis_stream功能模块支持Redis5流功能
.增加_cpp任务_qlen()方便用户获得当前线程池任务队列中积压的任务数;增线程_池()方法用来获得lib_aclc库中的线程池句柄
.特点:redis_client,redis_client_在非集群模式下创建连接时自动选择db
.特性:WebSocket::Send_Frame_Data在被循环调用时需检查长度是否一致,且需要根据实际写入的帧长度设置掩码
.特点:SERVER_SOCKET构造方法分开多个,避免使用时产生歧义
.特点:master_udp增加proc_on_unbind虚方法,用于当套接口关闭前的回调
.特性:acl::String添加End_with方法
.特点:服务器_套接字类的构造函数中新增标志位OPEN_LOGO_用来控制创建监听套接口是否禁止地址复用,缺省是允许地址复用
.特性:acl::Socket_Flow增加Sock_type来判断Socket类型
.特征:添加sqite_CURSOR类,从而使db_sqite支持Sqlitite游标功能
特征:添加令牌树类,该类封装了C版的256叉匹配树算法
功能:tbox模板类允许传递空消息对象
.特性:acl::String支持更多与std::String之间的互相操作
.特征:acl::fstream增加文件锁方法
.特性:tbox类完全由C++模板类实现,不再依赖于C版中的消息队列,代码更简洁清晰
特性:线程_cond类中的等待方法参加参数锁定,内部会先判断该参数决定是否需要加锁
.特点:CONNECT_CONNER类增加三个虚方法:ON_CONNECT,ON_DENAL,ON_TIM
.特点:redis_client_增加新方法GET_Password/GET_Password
特性:CONNECT_Manager增加CHECK_IDELL用来检测并释放过期空闲连接

.bugfix:扫描_dir.cpp当扫描的节点为目录时给的路径有误
.bugfix:CONNECT_Manager::CHECK_IDELL()当Pools_Size为0时应该直接返回
.bugfix:WebSocket::Read_Frame_Data被循环调用时,掩码使用方式有误
.bugfix:WebSocketServlet.cpp中有多个成员变量未初始化
.bugfix:master_aio/master_lines在添加server_Socket时,应该加锁
.bugfix:master_udp::service_on_bind被多线程同时调用时,需要对成员变量sstream_加锁保护
.bugfix:DB_mysql.cpp,如果在执行操作的时候,发现跟mysql已经断开链接了,就会重连,万一在连接时间内都没有重连成功,就会释放掉mysql*指针,造成这个连接对象永不可用了。因为dbmysql::sane_mysql_query函数判断conn_为null就直接返回了
-杨HB
.bugfix:gson_helper.pp在处理空数组时有误
.bugfix:json序列化工具对Double/Float类型且值不带小数部分时的支持不够完善,通过在acl::json_node::is_类型且值不带小数部分时的支持不够完善,通过在增加针对整数的支持得以解决
.bugfix:acl::httpServlet当会话对象内部创建时,需在析构函数里将其释放,否则会造成内存泄露
.bugfix:acl::线程对象被创建时,默认采用非分离状态,以便于和操作系统的行为相近,原来采用的是分离状态
.bugfix:redis_key::renmenx返回值类型有误

四、网络协程库:LiB纤维
.特性:增加tcp_类用来预创建类用来预创建tcp连接及连接保持,减少tcp三次握手造成的时延影响
.特征:添加fif_cond.c可用于协程和线程之间的条件变量
特征:FERF_Event.c增加控制参数,可用于协程之间、线程之间及协程与线程之间的互斥
.特性:光纤_server.c支持所生成核心文件的大小及进程退出时不产生核
.特征:增加纤维盒类,可以在协程之间、线程之间及协程与线程之间传递对象

.bugfix:acl_fif_cond.c中_fi纤_cond_timed候和acl_fif_cond_在释放fbase对象时,必须在调用_纤维事件_之前,否则会引起句柄被
提前关闭问题
.bugfix:acl_fiedcond.c中如果多个线程调用同一个条件变量的的_fiedcond_timedWait方法时,可能会存在超时值失效的情况
.bugfix:纤维_server.cpp当有连接未断开时,进程无法正常退出
.bugfix:fbase_中_如果遇到中断信号,应该需要重启_Wakeup/fbase_EventWakeup/fbase_Event_Wait IO如果遇到中断信号,应该需要重启IO过程
.bugfix:的方法_Event.c中需要用线程锁对等待队列_FERF_EVENT_NOTIFY中需要用线程锁对等待队列(事件->等待者)和原子数(事件->原子)进行保护,否则中间会有时间间隙,导致加锁等待者(调用ACL_FERF_EVENT_永久等待
.bugfix:FERF_Event.c修复锁竞争问题
.bugfix:FERF_Event.c中的锁存在几处锁竞争失效问题
.bugfix:Event_iocp.c中的IOCP_CHECK方法中的一处断言有问题--程序代码@sohu.com
.bugfix:getaddrinfo.c修复一处IPv 6相关问题
.bugfix:使用方法时,在初始化参数时不需要设置POLLERR,POLLHUP
.bugfix:acl_fif_gethostbyname在协程模式下是不安全的,会存在多个协程共用一个线程局部变量的问题,从而导致内存解析失败,解决方式是使用协程局部变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值