【mini-asio】 轻量级夸平台底层客户端网络解决方案

哥们,你做这东西也不容易了,只是,重。

更新v3.9.11f2: https://github.com/halx99/yasio/releases/tag/v3.9.11f2

[BugFix] 避免使用luaopen_yasio_cclua注册模块时影响Lua栈
[Feature] 新增选项: YOPT_NO_NEW_THREAD, 可以在调用线程处理io而不开新线程
[Improve] 新增选项: YOPT_CHANNEL_REMOTE_ENDPOINT,用于设置服务器地址和端口
[BugFix] 修复调用open channel无法关闭已有transport问题
[BugFix] 修复匿名结构体成员在vs2013上无法初始化问题.
[Improve] 整理枚举定义
[Improve] 优化io_service API: open,reopen
[Improve] 优化定时器实现,避免内存泄露
[Improve] 优化文件日志,使用无缓存的posix文件读写接口
[Improve] 当transport读取或写入出错时,将返回值存储在offset域,用于日志跟踪错误
[Improve] 由于连接被对方中断时在Android平台无法后去远端地址,因此用id代替来打印连接丢失日志
[Improve] 其他大量代码优化和逻辑优化

mark

更新v3.9.13
https://github.com/halx99/yasio/releases/tag/v3.9.13

  1. 修复当前长度解码错误时断开连接,错误码打印不对问题
  2. 增加jsb和jsb2.0支持ArrayBuffer支持
  3. 修复jsb bindings编译错误

更新v3.20.0

  1. 增强脚本二进制编码能力
  2. 其他优化和改动,详见release notes

release notes:
https://github.com/halx99/yasio/releases/tag/v3.20.0
wiki:
https://github.com/halx99/yasio/wiki

1赞

更新v3.20.1

Add script API: yasio.highp_clock
Add script API: yasio.highp_time
Add script API: yasio.ibstream.length
Add script API: yasio.ibstream.seek
Add script API: yasio.io_event.timestamp
Fix SIGBUS issue for ibstream,obstream

see:
https://github.com/halx99/yasio/releases/tag/v3.20.1

这只是客户端吗?可以用muduo当服务端来工作吗?还有怎么一直在更新,master分支是不是稳定版本了?

用release, 最近master主要修复一些编译器警告,核心基本没变了,
master分支现在是稳定版了,和v3.20.1完全一样

tcp,udp server也是支持的, 不过底层是用的select, 单io_service处理是有上限的,不建议用作高并发,高并服务器的话还是建议用libev, boost.asio, libuv等
这里有个简易的udp echo server例子: https://github.com/halx99/yasio/wiki/examples#udp-echo-server

这个只是向服务器发送tcp连接么?能封装成客户端socket和其他网络库交互么?没看懂你的cpptest里面是干嘛的。。

当然可以交互,yasio支持: TCP_CLIENT, TCP_SERVER, UDP_CLIENT, UDP_SERVER(non-windows system)。

膜拜大神

你gitbub上那个cpptest.cpp是干什么的啊?一个简单的socket客户端发起连接在c++里该怎么写?还有什么地方有教程么?

kcp的话,从核心内部实现好点,现在的yasio模型,内部有发送和接受队列, kcp貌似已经有队列,所以我更倾向于yasio_kcp, 也就是将kcp作为backend单独实现一份yasio

1赞

如果单纯简单简历tcp连接,不考虑使用异步模型那么可以这样写:

// client
xxsocket tcpcli;
if(0 == tcpserv.xpconnect(“192.168.1.23”/could be ipv6 address or hostname/, 2016)) {
tcpcli.send(buffer, sizeof(“hello server”));
}

教程文档的话看这里: https://github.com/halx99/yasio/wiki
异步模型用法lua有个比较完整的例子,是实现http get请求的: https://github.com/halx99/yasio/wiki/examples#http-client

后续会在wiki陆续多写一下demo

2赞

mark

最好能给出 在项目中使用的示例

对啊,最好是多点example,一般的网络库都有些基础功能的example的,比如echo,chat等,包括服务端和客户端,这样使用的人才更容易直接用在项目中,现在还是不太容易把这个库直接接入项目里。
话说你整合到你们项目的时候客户端和服务器都用的这个库吗?

没,我只集成到客户端,我们服务器是java, 并发服务器不建议使用本库

yasio-3.21.0

  1. 修复start_service/stop_service不能多次调用
  2. 增加YASIO_NI接口, 以便进行跨语言交互,例如C#, Unity.
  3. 修复lua5.2, lua5.3 C++11 编译问题
  4. transport使用对象池分配,返回句柄对YASIO_NI更安全
  5. 修改脚本API: ibstream.read_v, obstream.write_v默认使用变长长度域,和C# BinaryWriter, BinaryReader兼容
    6.移除脚本API: ibstream.read_string, obstream.write_string, 兼容方式: write_v/read_v, 具体见wiki
  6. YASIO_NI API: yasio_set_resolv_fn设置自定义域名解析, 例如httpdns

https://github.com/halx99/yasio/releases/tag/v3.21.0