我是如何彻底解决嵌入式HTTP客户端痛点的?

前言

你还在自己写HTTP协议吗?
你还在找好用的HTTP客户端吗?
你还在用难用移植的HTTP客户端吗?
你还在苦逼的移植安全加密库吗?
你还在用难用的API接口吗?

你还 …

高性能、跨平台的HTTP客户端发布

今天,它它它它它它来了,解决所有的痛点,一个高性能,跨平台的HTTP客户端,今天发布了,拥有极简的API接口,你知道吧,仅需要1行代码就能请求一个URL资源,一个对开发者及其友好的接口,用起来就是舒服,跨平台移植轻而易举。

github地址:https://github.com/jiejieTop/http-client

你可以很轻易让他跑在Linux、FreeRTOS、RT-Thread、TencentOS tiny等操作系统平台上,很轻松通过它去下载文件、请求HTTP服务器的数据,甚至是安全管理的加密协议你也不需要考虑,因为这个HTTP客户端会自动选择数据通道,无论是TCP还是TLS加密传输。

看到这里,你还感兴趣的话,请往下看。。。

http-client整体架构

http-client架构

介绍一下整个架构的思想:

  • 最上方是对外的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接口与稳定性

  1. 首先,高性能是因为使用了Node.js的底层解析库,众所周知Node.js是一个非常高性能的服务端JavaScript环境,而它的底层解析HTTP协议是用的C语言实现的超高性能的解析库,在目前看来应该是举世无双了。

  2. 跨平台是因为我自己实现了平台的抽象层,可以跑在不同的系统之中,它不像wget、curl一样,仅限于Linux平台。

  3. 极简的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);
      
  4. 稳定性,目前曾多次测试,都是很稳定的,数据不会丢失,获取109M的文件内容,重定向测试、都是非常好的,具体可以看后续的例子。

文档&说明

当然啦,作为一个开源软件,文档的介绍是必不可少的,我写了很多的文档介绍,所有的功能实现都有详细的文档介绍,每个组件有什么功能都列举出来了,你可以看到它是怎么实现的,如果你想学习源码的话,通过这些文档,你可以非常快速了解整个架构的实现。

文档

开发的历程

在github是可以看到我是写了功能的需求的,因为当时我是想着让大家参与进来的,所以写了开发计划的文档,并且不断完善它,很庆幸基本上所有的功能都已经实现了,当然后续还好持续添加新的功能,并且不断维护这个项目,所有的功能实现如下:

http-doc001

http-doc002

http-doc003

一些测试的例子效果

这些是GIF动态图,可以欣赏一下性能~

解析URL(超快的,性能杠杠的)

url_parsing

GET请求数据

get

POST数据到服务器

post

自动重定向处理

redirect

下载109M的文件,速度杠杠的

http

项目开源地址:

https://github.com/jiejieTop/http-client

猜你喜欢

转载自blog.csdn.net/jiejiemcu/article/details/106390201