1. 程式人生 > >Hadoop RPC通訊協議

Hadoop RPC通訊協議

下面我們看一下RPC伺服器端是如何採用上面的協議進行互動的。按照設想,RPC伺服器接受客戶端的連線請求後,伺服器首先讀取RPC Header,再讀取Header,最後不斷的讀取方法呼叫(Call)。伺服器端的Socket讀取都是通過Reader內部類最終由Server內部類Connection類來讀取。為了順利讀取Server.Connection設定了幾個內部變數,如下圖所示。這裡要特別說明一下dataLengthBuffer這個變數,因為這個變數的名字存在歧義。在第一次讀取的時候(讀取RPC Header的時候),dataLengthBuffer儲存的是‘hrpc’的byte陣列;在其他時候(讀取

Header的時候或者Call的時候)儲存的是長度(int)。除此之外,還需要注意的是RPC採用的非同步通訊的模式,伺服器採用如下的方式判斷一次讀取已經完成——如果讀取的結果為-1或者buffer沒有讀滿,則表明本次讀取已經完成但是資料還沒有完全讀取完成,需要繼續等待下一次讀取。