【开源】彻底解决嵌入式HTTP客户端的痛点
你还在自己写HTTP协议吗?
你还在找好用的HTTP客户端吗?
你还在用难以移植的HTTP客户端吗?
你还在苦逼的移植安全加密库吗?
你还在用难用的API接口吗?
你还 …..
高性能、跨平台的HTTP客户端
今天,它它它它它它来了,解决所有的痛点,一个高性能,跨平台的HTTP客户端,今天发布了,拥有极简的API接口,你知道吧,仅需要1行代码就能请求一个URL资源(我说的1行并不是你们所想的最后套一个函数,而是在绝大部分的情况下都可以使用的API接口),一个对开发者及其友好的接口,用起来就是舒服,跨平台移植轻而易举。
你可以很轻易让他跑在Linux、FreeRTOS、RT-Thread、TencentOS tiny等操作系统平台上,很轻松通过它去下载文件、请求HTTP服务器的数据,甚至是安全管理的加密协议你也不需要考虑,因为这个HTTP客户端会自动选择数据通道,无论是TCP还是TLS加密传输。
看到这里,你还感兴趣的话,请往下看。。。
HTTP客户端整体架构
介绍一下整个架构的思想:
最上方是对外的API接口,实现了基本的HTTP操作,如GET/POST等。
接着就是client管理器,通过池化技术实现了client pool,在使用的时候从池中取出client,用完就放回,用户基本不需要直接接触client实例,实现了基本的HTTP方法,如GET/POST等,还实现了url解析器,解析用户传入的url,生成合适的参数递交给拦截器。
实现工作队列,进行异步处理,在CPU支持多核的情况下,根据CPU的最大支持线程数量创建多个线程处理,将所有来自上层的请求按顺序放入工作队列,并行处理。
intercept是拦截器,比如实现HTTP请求、HTTP应答等,它需要依赖HTTP报文的处理。拦截器的主要的处理工作是通过上层传入的参数去设置网络信息(host、port等),与服务器建立连接、重连,发起HTTP请求、解析来自服务器的响应报文,自动处理重定向、身份验证及其他操作,而保证这些操作能完成的需要基础组件,通用的字符串处理、事件的回调处理、HTTP的通用信息等,最下方的read and write则是与network打交道的。
network是网络组件,它可以自动选择数据通道,如果是加密方式则通过tls进行数据传输,而tls可以选择mbedtls作为加密后端也可以选择openssl作为加密后端,它是自动选择数据通道的;也可以是tcp直连方式,最终都是通过tcp传输的,此外还实现了本地的routing(或者叫dns缓存,加快域名的解析处理)。
platform是平台抽象层,封装了不同系统的东西,比如socke或者AT,线程、时间、互斥锁、内存管理,这些是与系统打交道的,也是跨平台必要的封装。
最右边的则是通用的处理,list列表的处理、日志库、错误代码、软件随机数发生器等。
优势
如果你问我优势,那就是高性能、跨平台、极简的API接口与稳定性。
首先,高性能是因为使用了Node.js的底层解析库,众所周知Node.js是一个非常高性能的服务端JavaScript环境,而它的底层解析HTTP协议是用的C语言实现的超高性能的解析库,在目前看来应该是举世无双了。
跨平台是因为我自己实现了平台的抽象层,可以跑在不同的系统之中,它不像wget、curl一样,仅限于Linux平台。
极简的API接口,如果你要GET一个文件或者请求一个URL资源,1行代码就够了,至于为什么,请看我上面介绍的架构实现,用池化技术实现管理所有的client池,非常简洁,举个例子:
GET操作(ps:_http_cb是返回的数据内容的回调函数,直接读取数据就行了,你啥都不用管)
http_client_get("http://www.jiedev.com", _http_cb);
POST操作(直接指定URL,POST的数据内容,_http_cb是返回的数据内容,当然也可以为NULL)
http_client_post("http://httpbin.org/post", "this is a post test ...", _http_cb);
稳定性,目前曾多次测试,都是很稳定的,数据不会丢失,获取109M的文件内容,重定向测试、都是非常好的,具体可以看后续的例子。
文档说明
当然啦,作为一个开源软件,文档的介绍是必不可少的,我写了很多的文档介绍,所有的功能实现都有详细的文档介绍,每个组件有什么功能都列举出来了,你可以看到它是怎么实现的,如果你想学习源码的话,通过这些文档,你可以非常快速了解整个架构的实现。
ps:这些文档都在github项目主页中。
开发历程
在github是可以看到我是写了功能的需求的,因为当时我是想着让大家参与进来的,所以写了开发计划的文档,并且不断完善它,很庆幸基本上所有的功能都已经实现了,当然后续还好持续添加新的功能,并且不断维护这个项目,所有的功能实现如下:
测试的效果
这些是GIF动态图,可以欣赏一下性能~
URL解析,性能杠杠的,不愧为超高性能的解析库
GET请求数据
POST数据到服务器
自动处理重定向
下载109M的文件,性能真的杠杠的
项目开源地址:
https://github.com/jiejieTop/http-client
我为本项目建立一个交流群,拒绝伸手党,拒绝机器人,拒绝广告党,所以你应该知道怎么加我好友,并且说明来意,我拉你进来,纯粹为本项目交流。
觉得满意的话可以在github上点个小星星star一下,如果想参与开发,请详细阅读项目主页中【如何提交PR】的说明。