2016-08-12 ruki
tbox对于数据文件的解析提供了完善的支持,可以对各种二进制数据,文件数据流,网络数据流等进行各种解析操作 并且提供了一整套字节解析、比特位解析的接口,来支持各种流模式: stream 通用数据流,提供对流式数据的读写和解析,支持多层流嵌套以及各种协议(http, socket, file, data ...) 对于如何使用stream,这里暂时不详细介绍了,之后会单独重点介绍下,这里主要是为了描述,如何使用stream来处理字节数据的解析 例如,我要从数据流中,读取一个大端的16bits数值,很简单,只要: c tb_uint16_t value; if (tb_stream_bread_u16_be(stream, 继续阅读 »
2016-08-08 ruki
TBOX中提供了各种列表操作: list: 元素在内部维护的双向链表 list_entry: 元素在外部维护的双向链表 single_list: 元素在内部维护的单向链表 single_list_entry: 元素在外部维护的单向链表 由于双链和单链的接口使用类似,这里主要就讲解双链的具体使用。 那什么是内部维护和外部维护呢? 简单地说: 外部维护:就是链表容器本身不存储元素,不开辟内存空间,仅仅是一个节点头,这样比较节省内存,更加灵活。(尤其是在多个链表间元素迁移的时候,或者多个链表需要统一内存池维护的时候)。 内部维护:就是链表容器本身回去开辟一块空间,去单独存储元素内 继续阅读 »
2016-09-18 ruki
tbox supports sqlite3 and mysql databases now(depends on libsqlite3.a and libmysql.a) and provides the unified api to access database. We only need pass a given url for connecting and accessing it. A simple example: ```c /* init a mysql database * * mysql database url: * * - "sql://localhost: 继续阅读 »
2016-02-04 ruki
默认编译出来的tbox库,支持的功能比较全,带有所有模块,并且支持ssl(依赖polarssl/openssl)、gzip(依赖zlib)、database(依赖sqlite3/mysql)。 因此生成的库文件偏大,而且会依赖三个第三方库,如果你用不到上述三个模块,完全可以自己配置编译所需要的模块,减小生成库的大小。 新版采用xmake进行构建,裁剪模块已经是相当方便了,默认情况下回去自动检测依赖的第三方库进行编译。 如果要禁用某个第三方库或者模块,只要执行xmake f --xxxx=false就行了,所有第三方库依赖都是可选,完全可以禁用。。 例如,禁用所有第三方库支持: bash xmake f --pola 继续阅读 »
2016-10-29 ruki
tbox的协程实现,是stackfull模式的,需要指定独立堆栈和协程函数,目前暂时还不能像golang那样实现堆栈的动态增长,之后会对其进行支持。 目前提供下面一些功能特性: 1. 提供yield切换调度支持,这个是必须的哈 2. 提供suspend(挂起)/resume(恢复)协程接口,不同于yield的是,被suspend后,如果不显示调用resume恢复它,是永远不会被调度到的 3. 提供sleep等待接口支持 4. 提供io调度支持,支持socket等io等待(内部使用epoll, poll, kqueue, select, poll等接口调度) 5. 原生支持stream,socket,http等模块的协程支持,可 继续阅读 »
2016-12-03 ruki
tbox provides a lightweight implementation of stackless coroutines and it's interfaces are very simple too, for example: c tb_lo_coroutine_enter(coroutine) { while (1) { tb_lo_coroutine_yield(); } } The switch performance of this stackless coroutines is faster than the implementation of tbox's 继续阅读 »
2016-09-18 ruki
tbox目前支持sqlite3、mysql两种关系型数据库(需要链接对应的libsqlite3.a和libmysql.a),并对其接口进行了封装,使用更加的方便简洁并且只需要换个url,就可以随时切换成其他数据库引擎,而不需要修改接口。 下面先看个简单的例子: ```c /* 初始化一个mysql数据库 * * localhost: 主机名,也可以是ip地址 * type: 数据库的类型,目前支持:mysql 和 sqlite3两种类型 * username: 数据库用户名 * password: 数据库用户密码 * databas 继续阅读 »
2016-07-29 ruki
每个开发者在写了一段时间代码后,都会有自己一套适合自己的代码规范。 最近,也看到很多人聊起这些风格上的事,什么命名规则那个好啊,什么的。。 这些我个人不做评价,每个人观点和审美观都不一样,永远都争不出一个结果来,其实只要代码看着简洁明了,整个项目的规范统一就行了。。 这里,我只说说我在写tbox时候,对于一些代码规范上的一些个人经验,以及其演进过程。。 继续阅读 »
2016-02-25 ruki
New features Add smallest configure option Add process operation interfaces Changes Improve envirnoment interfaces Modify xmake.lua for supporting xmake v2.x Bugs fixed Fix ltimer bug Fix asio memory leaks bug Fix asio httpd response bug on linux Fix path bug for windows 继续阅读 »
2016-02-25 ruki
新特性 增加smallest参数配置选项,实现一键配置最小化编译,禁用所有扩展模块和依赖库 增加进程创建和控制接口 改进 增强环境变量设置接口 修改xmake.lua支持最新版xmake v2.x, 简化编译配置 Bugs修复 修复ltimer定时器不准问题 修复asio部分内存泄露问题 修复asio/httpd在linux下keepalive模式,响应很慢问题 修复windows下路径处理的一些bug 继续阅读 »