概述
之前已经在社区分享过,早期库名称叫xxsocket,后来改mini-asio, 再后来到现在库名称为yasio, 得益于智能手机移动平台的崛起和cocos社区的生命力,时至今日该网络库已有8年以上历史,几乎和作者从业生涯一样长。否则早就废弃了。
目前,该库已经支持lua,jsb,jsb2.0以及unity3d的c#绑定,最新稳定分支为v3.31
主要变化
自v3.26以来,主要是在库稳定性,易用性的,诸如忽略SIGPIPE信号,组播支持,Transport抽象,UDP android切后台问题,文件传输事件优化,cmake travis ci持续集成保证全平台代码质量,C++接口脚本绑定,YASIO_NI接口优化等
核心设计理念
yasio的设计核心是信道(Channel)负责连接管理,由io_service提供的类似文件io的open和close接口来操作,传输器(Transport)负责实际数据收发,可以理解为文件打开后的句柄,由io_service的write接口写入数据,dispatch分派网络服务的输入事件(对端发来的数据)
另外io_service接口设计上还借鉴了著名的下载库curl,通过set_option设置一下选项,之后start_service,网络线程就可以正常工作了,之前旧版本是在start_service初始化信道,会导致关于信道YOPT_C_XXX的选项在启动服务之前设置不生效,为了更方便使用,新版本将信道初始化放到了io_service构造函数,这样所有选项都可以在启动服务前设置。不过为了保持代码兼容,C++保留了原来的接口参数并标记为deprecated,但在脚本绑定和接下来的v3.31版本已经移除。
v3.31.3已发布,相对于3.30主要新增如下支持
- SSL/TLS支持
- TCP自动拆包netty网络框架LengthBasedFrameDecoder的InitialBytesToStrip参数支持
- c-ares集成
目录结构说明:
yasio/yasio: 核心源码
yasio/tests/tcp: c++ tcp通讯案例
yasio/tests/kcp: c++ kcp传输速度测试案例
yasio/tests/mcast: 组播支持测试案例
yasio/tests/udp_echo_server: UDP回显服务器
yasio/examples/lua: lua案例, tcp通讯,1个包拆分两次发送,验证框架拆包组包特性
yasio/examples/js: js案例,同lua案例一样
yasio/examples/ftp_server: 比较完整的TCP通讯案例,实现了标准ftp服务下载功能,可直接访问ftp://ftp.x-studio.net
编译个demo
确保安装vs2013以上或GCC4.9以上编译器, cmake最新版本后,执行如下命令:
git submodule --init --recursive
cd build
cmake .. && cmake --build . --config Debug
参考
yasio-releases下载链接: https://github.com/simdsoft/yasio/releases (updated)
该下载链接同时提供了creator v2.2.1的win版模拟器(需要已安装vs2019),creator测试工程inettester
yasio库被用于腾讯发行的手游“红警OL”: https://hjol.qq.com/
框架实现原理知乎文章: https://zhuanlan.zhihu.com/p/94633699