https://github.com/netsecsp/asynframe
项目背景 English | 中文
软件产品开发过程中经常碰到如下场景的问题:
- 各个模块所需要的配置参数集中管理?–涉及配置参数加载以及持久化等问题;
- 界面组能否利用现有的网络模块自己开发功能, 比如需要把日志文件通过http协议提交到后台?–涉及网络、httpdns以及使用网络代理等知识难点;
- 界面跟其他各个SDK模块(包括集成第三方开源项目)之间信息交互而产生问题?–涉及线程同步,事件序列以及操作耗时过长等问题;
- 各个模块(包括界面)通过创建工作线程去解决耗时/同步操作等问题,–涉及资源优化;
- 使用同步锁,–存在死锁问题;
- 模块业务逻辑复杂导致频繁发布补丁包。
项目介绍
这是一款windows平台下基于消息驱动的SDK开发框架,提供线程、管道、文件和网络等基础接口。
asynframe framework解决上面所提的软件产品开发过程中的六大问题:
- 通过有名参数管理对象来管理各个模块的参数
- 通过插件化以及统一操作接口来降低学习成本
- 提供在调用方的线程里通知结果以及设定串行操作链来解决线程同步,事件序列以及操作耗时过长等问题
- 通过有名线程池优化各个模块的工作线程执行
- 提供无锁化机制
- 集成lua插件实现热更新
功能特性:
- 通过微线程核对象可轻松集成到MFC,DUI,Qt6.x 等其他第三方开源项目
- 通过设备链提供统一设备操作接口(包括File、Pipe、Socket等)
- 通过操作链解决集成第三方开源项目时的线程之间的同步/通讯、执行超时以及资源/性能等问题
- 提供基本网络协议模块:dns/udp/tcp/ssl/ftp/http/rtsp/proxy/websocket
- 引用计数管理对象内存
- 支持微秒级定时器
- 集成Log4cplus,统一模块输出日志
开发优势:
- 支持可升级的插件化,协助windows产品模块化。
- 支持跨进程获取崩溃时生成堆栈信息和dmp文件。
- 通过微线程核对象嵌入其他线程隔离其他代码,便于代码重构。
- 通过异步执行框架来获得极流畅用户体验。
- 统一的开发模板,无锁化机制、高性能IO框架以及demo降低开发者学习成本。能够迅速开发出稳定地,高性能的应用模块。可大幅度降低开发代码量。
模块 | 类型 | 功能 | 例子/程序 |
---|---|---|---|
asyncore | 框架 | asynframe框架 | \support\testframe |
集成到mfc | \support\3rd\mfc\testnetserver \support\3rd\mfc\testnetclient_dlg \support\3rd\mfc\testnetclient_doc | ||
集成到DUI | \support\3rd\dui | ||
crashexplorer | 插件[asyncore] | 捕获当前进程的崩溃信息,同时生成dmp文件 | \support\testcrashexplorer |
console | 插件[asyncore] | 命令控制台 1.支持加载/卸载ICommand插件: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代理 | aneta |
asynsock | 插件[asyncore] | 网络 1.支持ipv6兼容ipv4 2.支持默认DNS 解析 | \support\testnetclient \support\testnetserver ping |
dns | 插件[asynsock] | 域名解析 1.udp dns 2.tcp dns 3.httpDNS: 实现阿里云/腾迅云 | \support\testdns |
ftp | 插件[asynsock] | ftp 协议 | aftpx |
http | 插件[asynsock] | http协议 | ahttp |
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 |
lua | 插件 | 基于lua-5.4.4实现IOsCommand接口 1.支持多线程 | \support\testframe \support\testlua\testapi |
sqlite | 插件 | 基于sqlite-3.3.20实现IOsComman接口 | \support\testframe |
变更记录
2022/11/02 发布windows平台的asynframe framework v1.3
- crashexplorer 实现崩溃时跨进程输出栈信息和dmpfile
- ssl 修复兼容性问题
- 支持插件热升级
2022/06/08 发布windows平台的asynframe framework v1.2
2022/05/26 发布windows平台的asynframe framework v1.1
2022/05/05 发布windows平台的asynframe framework v1.0
编译环境
sdk_v1.3-Msvc2019_20221102.zip是通过Microsoft Visual Studio 2019编译的SDK
sdk_v1.3-Msvc2013_20221102.zip是通过Microsoft Visual Studio 2013编译的SDK
- 需在工程里设置asynframe相应的include/lib路径
- 根据工程的运行库选择链接asynframe相应的asynsdk_mini-[MD/MDd/MT/MTd].lib
- 链接asyncore.lib(提供3个api函数1)
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), 0); //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;
}
开发
-
asynframe framework 导出函数
-
接口定义
IAsynFrame
IAsynFileSystem
IAsynIpcChannel
IAsynNetwork
IAsynNetAgent
IConsole
IExceptionTrapper
INet
IProxy
ISsl
IVmHost -
基础模块
- asyncore
- asynfile
- asynipcs
- asynsock
- crashexplorer
网络模块
扩展模块
鸣谢
版权信息
Copyright © 2012 - 2032, All rights reserved.
Author: Shengqian Yang, China, netsecsp@hotmail.com
STDAPI_(extern HRESULT) Initialize( IAsynMessageEvents *param1, IKeyvalSetter param2 );
STDAPI_(extern InstancesManager) GetInstancesManager();
STDAPI_(extern HRESULT) Destory(); ↩︎