從通信內容/功能上看
http應用於web環境,rpc應用於分布式調度
從功能上看沒有太大區別,很多情況下rpc與消息中間件結合通信實現分布式調度
從用法上看
兩者都是c/s結構,無太大區別
從實現上看
類型 底層協議
從性能上看
1、聽說rpc是長鏈接,http是三次握手。
長鏈接雖然,可以減少tcp開銷,相對的它會導入新的缺點,是否會對連接數數量有限制呢?
2、假如rpc的性能比http高,無非就是socket多連接了三次。如果http結合非阻塞io服務器(例如tornado),這三次連接開銷真沒啥消耗。
當然網絡也會有一點消耗. 非阻塞io服務器可以將rpc與http的性能差距拉平
從鏈接開銷上,比較性能問題,本就是錯誤,兩者是在解決不同問題,所有沒有必要在這個問題上糾結。請繼續看下面
從概念上看
rpc遠程調用
http超文本傳輸協議
該如何選擇呢?
1、思考這個問題,應該用最簡單的方式,相信協議設計者,會選擇最好方式來解決它面臨的問題(畢竟協議代表着公認),我們只用關注它解決什么問題。
rpc解決什么問題呢?遠程調用。“調用”屬於程序內部之間。調用總不可能只傳簡單參數,會涉及到對象序列化,
這個對象在開發是代碼總不會用兩套吧,server與client很可能是在一起的屬於一個組件.
2、連接數不該是”調用”考慮的事。在創建一個全局連接后,不會再頻繁創建連接. 如果rpc作為服務,頻繁連接的場景不適合它
總結
1、c與s關系緊密程度
rpc遠程調用,屬於程序內部之間,cs關系密切。
http,適合不同組件, cs關系獨立。
2、連接數
rpc叫調用,頻繁連接的場景不適合它
http的應用的web環境,本就是頻繁連接的場景