acl 3.5.0 发布,跨平台网络通信与服务器开发框架

栏目: 软件资讯 · 发布时间: 7年前

内容简介: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 方法中的一处断言有问题 -- program_code@sohu.com
.bugfix: getaddrinfo.c 修复一处 IPV6 相关问题
.bugfix: 使用 poll 方法时,在初始化参数时不需要设置 POLLERR, POLLHUP
.bugfix: acl_fiber_gethostbyname 在协程模式下是不安全的,会存在多个协程共用一个线程局部变量的问题,从而导致内存解析失败,解决方式是使用协程局部变量

软件下载链接:https://gitee.com/acl-dev/acl


以上所述就是小编给大家介绍的《acl 3.5.0 发布,跨平台网络通信与服务器开发框架》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具