我是靠谱客的博主 无限超短裙,最近开发中收集的这篇文章主要介绍嵌入式Linux系统基于libevent&openssl的https服务,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 重新交叉编译libevent

首先我们需要修改configure文件:

给OPENSSL_INCS指定为openssl库的绝对路径/相对路径:

然后运行命令:

./configure OPENSSL_LIBADD="-L../../openssl/openssl-1.0.2d -lssl -lcrypto" --host=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc

这里-L后面加的路径需要根据实际情况而定,可以是相对路径,也可以是绝对路径!

没有提示error就是成功了,接着我们进行编译,直接运行命令即可: make

编译成功生成对应的动态库。

查看文件属性,如果是ARM平台就说明编程没有问题了:

2  httpd

libevent库中包含了http的组件API,我们可以基于这些API实现http的server,API的头文件主要在 libevent-2.1.12-stable/include/event2/http.h 中。

httpd是我们基于libevent针对http封装出来的类,将其中API调用的细节进行了统一处理,因此借助httpd可以非常容易搭建出http(s)服务器出来,主要接口如下:

两个构造函数,第一个是搭建http服务器,第二个需要证书和私钥用于搭建https服务器;参数需要给ev_proxy的对象指针还有port,port是网络端口。收到数据后会回调on_request给上层应用,上层应用处理完需要调用on_response进行响应。

首先我们看看如何基于httpd构建一个https服务器:

非常简单,定义一个类继承httpd,然后把必须的参数给到httpd,有数据了就会调用到on_request函数中,我们调用on_response进行响应即可;主函数就更简单了,实例化shttpd就可以。

核心源码在于httpd.cpp中,有几个地方需要说明下:

a、构造函数

构造函数中会初始化ssl_,true表示https,false表示http,然后在builder中启动服务器,builder根据ssl_确定是否要初始ssl:

evhttp_new是实例化一个http对象;

evhttp_set_cb可以根据URI来设置回调函数,比如”/app”;

ssl_init 实际上是和openssl有关系:

基本就是初始化,设置证书,设置密钥等操作。

HTTP是一个请求/响应的逻辑,httpd中设置了响应的超时时间3500ms,如果超时了,那么会自动回复客户端一个错误,这个时间可以在on_request中进行修改:

void httpd::on_request(struct evhttp_request *req, const char *tag)

中有一句代码: session->ticks = 35; // 35 * 100ms

3  应用实例

代码树如下:

Makefile 需要链接libevent和openssl:

直接编译即可:

编译成功会生成shttpd,由于是交叉编译,因此需要copy到板子上运行,我们也可以编译出X86下的应用做测试;http调试的客户端很多,可以手机下载一个http client,也可以用curl工具。

测试如下,客户端使用curl,发送:curl -H "Content-Type:application/json" -X GET --connect-timeout 4 -m 2 -k -g -d '{"info":"hello"}' https://127.0.0.1:8080/app

服务端接收后调用on_responsed进行响应,客户端接收后打印出来;补充说明一下,由于https需要证书和密钥,我们放在pem目录中:

大家根据代码设置所在路径即可。

 

============================================================================================================================================================

如果觉得对您有帮助并想进一步深入学习交流可以扫描以下微信二维码或加入QQ群:928840648

欢迎共同学习成长,有一群爱学习的小伙伴一起勉励!!一起加油!!也可点击

 

笔者基于嵌入式系统框架内容如下整理编辑:

 

 

最后

以上就是无限超短裙为你收集整理的嵌入式Linux系统基于libevent&openssl的https服务的全部内容,希望文章能够帮你解决嵌入式Linux系统基于libevent&openssl的https服务所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部