1. 程式人生 > >在linux上使用c++實現http/2協議進行通訊

在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。