采用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。