網絡通信的開發,就涉及到一些開發框架:Java NIO、Netty、Mina 等等。 理論上來說,類似於序列化器,可以為其定義一套統一的接口,讓不同類型的框架實現,事實上,Dubbo 就是這么干的。 但是,作為一個簡單的 RPC 框架,ccx-rpc 就先不統一了,因為基本上網絡框架是不會換 ...
一 心跳 什么是心跳 在 TPC 中,客戶端和服務端建立連接之后,需要定期發送數據包,來通知對方自己還在線,以確保 TPC 連接的有效性。如果一個連接長時間沒有心跳,需要及時斷開,否則服務端會維護很多無用連接,浪費服務端的資源。 IdleStateHandler Netty 已經為我們提供了心跳的 Handler:IdleStateHandler。當連接的空閑時間 讀或者寫 太長時,IdleSta ...
2021-09-07 08:57 4 492 推薦指數:
網絡通信的開發,就涉及到一些開發框架:Java NIO、Netty、Mina 等等。 理論上來說,類似於序列化器,可以為其定義一套統一的接口,讓不同類型的框架實現,事實上,Dubbo 就是這么干的。 但是,作為一個簡單的 RPC 框架,ccx-rpc 就先不統一了,因為基本上網絡框架是不會換 ...
Netty 在服務端與客戶端的網絡通信中,使用的是異步雙向通信(雙工)的方式,即客戶端和服務端可以相互主動發請求給對方,發消息后不會同步等響應。這樣就會有一下問題: 如何識別消息是請求還是響應? 請求如何正確對應到響應? 1. 如何識別消息是請求還是響應 為了識別消息類型是請求 ...
我們在接下來會開始講網絡通信相關的內容了。既然是網絡通信,那必然會涉及到序列化的相關技術。 下面是 ccx-rpc 序列化器的接口定義。 接口只包含序列化、反序列化兩個最基礎的方法。不同的序列化器只需要實現這個接口即可,再配合 SPI 就可以使用了。 下面是 ccx-rpc 的一小 ...
當 RPC 框架使用 Netty 通信時,實際上是將數據轉化成 ByteBuf 的方式進行傳輸。 那如何轉化呢?可不可以把 請求參數 或者 響應結果 直接無腦序列化成 byte 數組發出去? 答:直接序列化傳輸是不行的,會出現粘包拆包的問題。 粘包拆包 什么是粘包拆包 RPC 通信 ...
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; ...
RPC 中服務消費端(Consumer) 需要請求服務提供方(Provider)的接口,必須要知道 Provider 的地址才能請求到。 那么,Consumer 要從哪里獲取 Provider 的地址呢? 能不能 Consumer 自己配置 Provider 的地址? 這種方式理論上是可行 ...
前言 RPC 框架是后端攻城獅永遠都繞不開的知識點,目前業界比較知名有 Dubbo、Spring Cloud 等。很多人都停留在了只會用的階段,作為程序猿,擁有好奇心深入學習,才能有效提高自己的競爭力。再進一層的同學,會去翻源碼,看功能是如何實現的,這是很好的開始。看源碼過一段時間容易忘記 ...
在網絡傳輸中,怎么確保通道連接的可用性是一個很重要的問題,簡單的說,在網絡通信中有客戶端和服務端,一個負責發送請求,一個負責接收請求,在保證連接有效性的背景下,這兩個物體扮演了什么角色,心跳機制能有效的保證連接的可用性,那它的機制是什么,下文中將會詳細講解。 網絡層的可用性 首先講一下TCP ...