在linux上使用c++實現http/2協議進行通訊
阿新 • • 發佈:2019-01-01
採用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。