Skip to the content.

Asynframe framework v1.7.1

https://github.com/netsecsp/asynframe

项目背景 english

软件产品开发过程中经常碰到如下场景的问题:

  1. 各个模块所需要的配置参数集中管理?–涉及配置参数加载以及持久化等问题;
  2. 界面组能否利用现有的网络模块自己开发功能, 比如需要把日志文件通过http协议提交到后台?–涉及网络、httpdns以及使用网络代理等知识难点;
  3. 界面跟其他各个SDK模块(包括集成第三方开源项目)之间信息交互而产生问题?–涉及线程同步,事件序列以及操作耗时过长等问题;
  4. 各个模块(包括界面)通过创建工作线程去解决耗时/同步操作等问题,–涉及资源优化;
  5. 使用同步锁,–存在死锁问题;
  6. 模块业务逻辑复杂导致频繁发布补丁包。

项目介绍

这是一款windows平台下基于消息驱动的SDK开发框架,提供线程、管道、文件和网络等基础接口。

asynframe framework解决上面所提的软件产品开发过程中的六大问题:

  1. 通过有名参数管理对象来管理各个模块的参数
  2. 通过插件化以及统一操作接口来降低学习成本
  3. 提供在调用方的线程里通知结果以及设定串行操作链来解决线程同步,事件序列以及操作耗时过长等问题
  4. 通过有名线程池优化各个模块的工作线程执行
  5. 提供无锁化机制
  6. 集成lua插件实现热更新
    image

功能特性:

  1. 通过微线程核对象可轻松集成到MFC,DUISoUIQt6.x 等其他第三方开源项目
  2. 通过设备链提供统一设备操作接口(包括File、Pipe、Socket等)
  3. 通过操作链解决集成第三方开源项目时的线程之间的同步/通讯、执行超时以及资源/性能等问题
  4. 提供基本网络协议模块:dns/udp/tcp/ssl/ftp/http/rtsp/proxy/websocket
  5. 引用计数管理对象内存
  6. 支持微秒级定时器
  7. 集成Log4cplus,统一模块输出日志
    image

开发优势:

  1. 支持可升级的插件化,协助windows产品模块化。
  2. 支持跨进程获取崩溃时生成堆栈信息和dmp文件。
  3. 通过微线程核对象嵌入其他线程隔离其他代码,便于代码重构。
  4. 通过异步执行框架来获得极流畅用户体验。
  5. 统一的开发模板,无锁化机制、高性能IO框架以及demo降低开发者学习成本。能够迅速开发出稳定地,高性能的应用模块。可大幅度降低开发代码量。
  6. 支持网络udp/tcp端口复用框架。
  7. 支持lua框架。
  8. 支持jvm框架。
模块 类型 功能 例子/程序
asyncore 框架 asynframe框架 \support\testframe
    集成到MFC \support\3rd\mfc\testnetserver
\support\3rd\mfc\testnetclient_dlg
\support\3rd\mfc\testnetclient_doc
    集成到DUI \support\3rd\Dui
    集成到SoUI \support\3rd\Sui
crashexplorer 插件[asyncore] 捕获当前进程的崩溃信息,同时生成dmp文件 \support\testcrashexplorer
console 插件[asyncore] 命令控制台
1.支持加载/卸载IOsCommand插件:cmd/lua/sqlite
2.支持键盘/鼠标输入
\support\testconsole
asynfile 插件[asyncore] 文件 \support\testfile_copy
\support\testfile_copy-pipe
asynipcs 插件[asyncore] 进程间通讯 \support\testipcclient
\support\testipcserver
asynneta 插件[asyncore] 服务端代理
1.支持http/https代理:实现Basic/Digest认证
2.支持ftp/ftps代理
3.支持socks4.0/4.a/5.0代理
4.提供tcp/udp端口转发
aneta
asynsock 插件[asyncore] 网络
1.支持ipv6兼容ipv4
2.支持默认DNS 解析
\support\testnetclient
\support\testnetserver
pingx
dns 插件[asynsock] 域名解析
1.udp dns
2.tcp dns
3.httpDNS: 实现阿里云/腾迅云
\support\testdns
ftp 插件[asynsock] ftp 协议 aftpx
acurl
http 插件[asynsock] http协议 ahttp
acurl
rtsp 插件[asynsock] rtsp协议
1.支持rtsp over http
\support\testnetclient_rtsp
\support\testnetserver_rtsp
ssl 插件[asynsock] ssl/tls加/解密
1.支持p12证书
\support\testnetclient_ssl
\support\testnetserver_ssl
proxy 插件[asynsock] 客户端代理
1.支持http/https代理:实现Basic/Digest认证
2.支持ftp/ftps代理
3.支持socks4.0/4.a/5.0代理
\support\testnetclient_proxy
\support\testnetserver_socks
websocket 插件[asynsock] websocket协议
1.支持数据帧分片
2.优先发送控制帧
\support\testnetclient_websocket
\support\testnetserver_websocket
zip 插件 基于zlib-1.2.11.0实现IDataTransmit接口
1.支持压缩zip文件
2.deflate/inflate数据
\support\testframe
sqlite 插件 基于sqlite-3.3.20实现IOsComman接口 \support\testframe
dtp 插件[asynsock] 实现tcp/udp的端口复用框架 \support\testnetserver_dtp-tcp.port
\support\testnetserver_dtp-udp.port
lua 插件 基于lua-5.4.4实现IOsCommand接口执行lua框架 \support\testlua\testlua
\support\testlua\testapi
jvmproxy 插件 实现IOsComman接口执行java框架 \support\testjava\testjvm
\support\testjava\testapi
javax

变更记录

2024/08/16 发布windows平台的asynframe framework v1.7.1

  1. 发布插件: jvmproxy
  2. 修正IKeyval.Set没有过滤空串而引起崩溃的问题
    2024/07/12 发布windows平台的asynframe framework v1.6.1
    2023/11/15 发布windows平台的asynframe framework v1.5.2
    2023/03/31 发布windows平台的asynframe framework v1.4.6
    2023/02/02 发布windows平台的asynframe framework v1.3.2
    2022/06/08 发布windows平台的asynframe framework v1.2.0
    2022/05/26 发布windows平台的asynframe framework v1.1.0
    2022/05/05 发布windows平台的asynframe framework v1.0.0

编译环境

sdk_v1.7.1-Msvc2019_20240816.zip是通过Microsoft Visual Studio 2019编译的SDK
sdk_v1.7.1-Msvc2013_20240816.zip是通过Microsoft Visual Studio 2013编译的SDK

  1. 需在工程里设置asynframe相应的include/lib路径
  2. 根据工程的运行库选择链接asynframe相应的asynsdk_mini-[MD/MDd/MT/MTd].lib
  3. 链接asyncore.lib
    int main(int argc, const char *argv[])
    {
     HRESULT ret = Initialize(NULL, NULL); //Initialize asynframe
     if( ret != NO_ERROR )
     {
         return 1;
     }
    
     InstancesManager *lpInstancesManager = GetInstancesManager(); //Get the instance manager, which can get all interfaces
    
     CComPtr<IAsynFrameThread> spAsynFrameThread; //Create thread
     lpInstancesManager->NewInstance(0,0,IID_IAsynFrameThread, (void**)&spAsynFrameThread);
    
     lpInstancesManager->Require(STRING_from_string(IN_AsynNetwork)); //Load network module
    
     CComPtr<IAsynNetwork    > spAsynNetwork;
     lpInstancesManager->GetInstance(STRING_from_string(IN_AsynNetwork), IID_IAsynNetwork, (void **)&spAsynNetwork);
    
     CComPtr<IAsynUdpSocket  > spAsynUdpSocket; //Create UDP object
     spAsynNetwork->CreateAsynTcpSocket(&spAsynTcpSocket );
    
     spAsynUdpSocket->Bind(asynsdk::STRING_EX::null, 0, 0, NULL);  
    
     ......
    
     Destory(); //Destory asynframe
     return 0;
    }
    

开发

接口定义
IAsynFrame
IAsynFileSystem
IAsynIpcChannel
IAsynNetwork
IAsynNetAgent
IConsole
IExceptionTrapper
INet
IProxy
ISsl
IScriptHost
IDtp

[插件使用](https://netsecsp.github.io/doc/externapi.md)

基础模块
asyncore
asynfile
asynipcs
asynsock
crashexplorer

网络模块
asynneta
dtp
dns
ftp
http
rtsp
proxy
ssl
websocket

扩展模块
console
lua
jvm
zip
sqlite

鸣谢

Log4cplus
Lua
Luatinker
Zlib
Sqlite
FFmpeg

版权信息

Copyright (c) 2012 - 2032, All rights reserved.
Author: Shengqian Yang, China, netsecsp@hotmail.com