-
-
Notifications
You must be signed in to change notification settings - Fork 718
流的整体架构
ruki edited this page Aug 15, 2014
·
6 revisions
TBOX主要有三种流
stream: 最常用的流,一般用于单路阻塞、非阻塞io的处理,接口简单易用
async_stream:异步流,基于asio的流,全程回调处理,可以在单个线程里支持多路流的并发,节省系统资源,提高效率
static_stream:静态流,用于对纯buffer的位流处理,一般用于各种解析器
不管是stream还是async_stream,都可以在其上挂接多路filter,实现流之间数据过滤和变换。目前支持以下几种filter:
zip_filter:gzip、zlib的压缩和解压缩过滤器
charset_filter:字符集编码的过滤器
chunked_filter:http chunked编码的解码过滤器
如果在一个xml解析器上同时挂接:
http/xml => chunked_filter => zip_filter => charset_filter => stream/async_stream => xml_reader
就可以实现对xml文件的边下载、边解压、边转码、边解析,这样就可以完美支持大规模xml数据的解析支持,而且内存使用率也不会太高
还有两种基于流的传输器:
transfer:基于两路stream的传输器,可以用于简单的http下载、上传、文件之间的copy等等。
async_transfer:基于async_stream的异步传输器,可以用于多路并发io传输。
还有一个对async_transfer进行管理的传输池:transfer_pool,你可以把各种下载任务、上传任务以及其他io传输任务,一股脑的扔到池子里面去,什么时候哪个任务传输完了,传输了多少,都有进度回调报告状态,用起来相当方便。
目前的流可以支持如下几种url格式:
data://base64
file://path or unix path: e.g. /root/xxxx/file
sock://host:port?tcp=
sock://host:port?udp=
socks://host:port
http://host:port/path?arg0=&arg1=...
https://host:port/path?arg0=&arg1=...
具体架构见下图: