RSocket 學習(一):初探 一. RSocket 介紹 二. RSocket 特點 三. RSocket 使用的術語

一. RSocket 介紹

RSocket 是一種二進制字節流傳輸協議,位於 OSI 七層模型中的5、6層,對應 TCP/IP 模型中的應用層。RSocket 並沒有規定必須使用何種底層傳輸層協議,開發者可以使用不同的底層傳輸協議,包括 TCP、WebSocket 和 Aeron。

RSocket 採用二進制格式,從而保證了傳輸的高效、節省帶寬。RSocket 中的 R 是指 Reactive。因此,通過基於響應式流語義的流控制,RSocket 保證了消息傳輸中的雙方不會因爲請求的壓力過大而崩潰。

RSocket 支持常見的響應式框架:RxJava、Spring Reactor。

二. RSocket 特點

與傳統的 Http 協議不同,RSocket 支持多種交互模型,例如流和推送,而不是整個單個連接上的簡單請求/響應。

RSocket 還支持連接的恢復,它允許流在不同的傳輸連接上恢復,這在連接頻繁斷開、切換和重新連接時特別有用。特別是在移動端的場景下使用。

RSocket 特點包括如下:

  • 消息驅動:RSocket 的網絡通信是異步的,並將所有通信建模爲單個網絡連接上的多路消息流,並且在等待響應時從不同步阻塞。
  • 多種交互模型:RSocket 包括四種交互模型 Fire-and-Forget、Request/Response、Request/Stream、Channel。
  • 取消:所有流(包括請求/響應)都支持取消,以便高效地清理服務器(響應者)資源。
  • 可恢復性:RSocket 支持會話恢復,允許通過簡單的握手通過新的傳輸連接恢復客戶機/服務器會話。
  • 應用程序流程控制:RSocket 支持兩種形式的應用程序級流控制,以幫助保護客戶端和服務器資源不被淹沒:“響應流” request(n) 異步拉取和租用。
  • 多語言支持:支持 Java、Kotlin、JavaScript、Go、.Net、C++。
  • 傳輸層靈活性:RSocket 允許開發者根據環境、設備功能和性能需求使用不同的底層傳輸層。
  • 效率與性能:低效率地使用網絡資源的協議(重複握手和連接設置以及降低開銷、臃腫的消息格式等)會極大地增加系統的感知延遲。此外,如果沒有流控制語義,當依賴服務的速度減慢時,一個寫得不好的模塊可能會溢出系統的其餘部分,從而可能導致重試風暴,給系統帶來進一步的壓力。Hystrix 是一個試圖解決同步請求/響應問題解決方案。然而,它的開銷和複雜性是有代價的。RSocket 通過支持非阻塞、雙工、異步應用程序通信,並通過對來自任何語言的多個傳輸進行流控制,減少感知延遲並提高系統效率。RSocket 使用二進制編碼提高 CPU 和內存效率,避免握手和相關的往返網絡開銷。

三. RSocket 使用的術語

  • Frame: 包含請求、響應或協議處理的單個消息。
  • Fragment: 應用程序消息的一部分,已被分區以包含在一個幀中。
  • Transport: 用來傳輸 RSocket 協議。包括 WebSockets、TCP 或 Aeron 之一。
  • Stream: 操作單元(請求/響應等)。
  • Payload: 流消息(上游或下游)。包含與先前請求創建的流關聯的數據。在響應流和 Rx中,相當於是“onNext”事件。
  • Complete: 在流上發送的終端事件,表示成功完成。在響應流和 Rx 中,相當於是“onComplete”事件。
  • Connection: 客戶端和服務器之間傳輸會話的實例。
  • Requester: 發送請求的一方。一個連接最多有2個請求者,每個方向一個。
  • Responder: 接收請求的一方。一個連接最多有2個響應者,每個方向一個。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章