快捷搜索: 王者荣耀 脱发

在linux上使用c++实现http/2协议进行通信

采用nghttp2是一个http/2协议的翻译器。

采用openssl进行TLS通信,实现加密和安全。

采用socket与目标server建立tcp连接,实现底层数据通信。

        nghttp2 是一个很优秀的 HTTP/2 的 C 类实现。它的前身是 SPDY 库 spdylay,作者都是 Tatsuhiro Tsujikawa.
地址:https://github.com/nghttp2/nghttp2

        OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

地址:https://github.com/openssl/openssl

一、连接建立
1、初始化一个socket,conect()至目标服务器,得到一个句柄fd。

2、使用SSL_CTX_new初始化SSL_CTX,调用SSL_new这个SSL_CTX 初始化一个ssl,使用句柄fd与服务器端进行握手。

3、nghttp2_session_callbacks_new申请初始化回调函数,nghttp2_session_client_new初始化一个新http2的session,至此建立了http/2的通信连接。

二、调用nghttp2_submit_request提交请求。

三、io控制

1)调用nghttp2_session_want_read、nghttp2_session_want_write进行IO检测。

2)调用nghttp2_session_recv、nghttp2_session_send进行io读取。

四、连接关闭

1、调用nghttp2_session_del关闭释放nghttp2缓存 。

2、调用SSL_shutdown、SSL_free、SSL_CTX_free关闭释放ssl 。

3、调用shutdown、close关闭释放socket。
经验分享 程序员 微信小程序 职场和发展