OceanBase的網絡架構代碼如下:
OceanBase服務端接收用戶端發送的網絡包(ObPacket),并交給handlePacket處理函數進行處理。預設情況下,handlePacket會将網絡包加入到全局任務隊列中。接着,工作線程會從全局任務隊列中不斷擷取網絡包,并調用do_requst進行處理,處理完成後應答用戶端。可以分别通過set_tread_count以及set_io_thread_count函數來設定工作線程以及網絡線程的個數。
用戶端使用ObCilentManager發送網絡包:
用戶端發包分為兩種情況:異步請求(post_request)以及同步請求(send_request)。異步請求時,用戶端将請求包加入到網絡發送隊列後立即傳回,不等待應答。同步請求是,用戶端将請求包加入到網絡發送隊列後開始阻塞等待,直到網絡線程接收到服務端的應答包後才喚醒用戶端,進而執行後續處理邏輯。