Asynframe framework v1.3

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插件实现热更新

功能特性:

  1. 通过微线程核对象可轻松集成到MFC,DUIQt6.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降低开发者学习成本。能够迅速开发出稳定地,高性能的应用模块。可大幅度降低开发代码量。
模块类型功能例子/程序
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

  1. crashexplorer 实现崩溃时跨进程输出栈信息和dmpfile
  2. ssl 修复兼容性问题
  3. 支持插件热升级

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

  1. 需在工程里设置asynframe相应的include/lib路径
  2. 根据工程的运行库选择链接asynframe相应的asynsdk_mini-[MD/MDd/MT/MTd].lib
  3. 链接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;
}

开发

鸣谢

Log4cplus
Lua
Zlib
Sqlite

版权信息

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


  1. STDAPI_(extern HRESULT) Initialize( IAsynMessageEvents *param1, IKeyvalSetter param2 );
    STDAPI_(extern InstancesManager
    ) GetInstancesManager();
    STDAPI_(extern HRESULT) Destory(); ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值