RSocket——Http協議的替代者

1. 簡介

RSocket是一種二進制的點對點通訊協議,是一種新的網絡通訊第七層協議。旨在用於分佈式應用程序中。從這個意義上講,RSocket是HTTP等其餘協議的替代方案。它是一種基於Reactive Streams規範具備異步,背壓的雙向,多路複用,斷線重連,基於消息等特性。它由Facebook,Netifi和Pivotal等工程師開發,提供Java,JavaScript,C ++和Kotlin等實現。java

2. 背景

說到這裏就有一些疑問了,爲何要搞這個協議?難道程序員吃飽了撐得搞點新東西折騰本身?上面提到了Reactive Streams規範。若是你對這個規範不熟悉就須要經過 https://felord.cn 補補課了。這是java領域新的響應式規範,Reactor 3 、RxJava 都是該規範的實現。webflux、hystrix 總據說過吧。java 9 也吸取了該規範的一些精華。也就是說咱們如今能夠實現網絡通訊上的響應式了。響應式一個重要的特性就是背壓(backpressure)。http通訊中服務端接收到過多的請求很容易會過載,嚴重時致使宕機。而經過背壓處理能夠選擇性的響應請求來避免這種狀況。還有http協議是無狀態的,只要有請求不論是有效的仍是無效的,是不是重複的,服務器都會進行處理直到完成。若是使用響應式必定程度會大大減小這些無心義的請求。有時候咱們須要創建起長鏈接。就須要藉助於Websocket來實現。若是使用RSocket就很容易創建鏈接雙方的管道。還有其它很是多的場景這裏再也不一一列舉。程序員

3. 特性

其實上面也說明了一些RSocket的特性。這裏簡單總結一下:web

  • 具備語言無關性的二進制通訊協議
  • 異步非阻塞消息驅動通訊,高性能
  • 實現了網絡通訊的背壓處理,在此基礎上進行流量控制、鏈接恢復
  • 自然支持雙向通訊
  • 更加適合分佈式通訊場景

4. RSocket四種交互模型

RSocket定義了四種交互模型來彌補Http協議的不足之處:服務器

  • Fire-and-Forget:優化請求/響應,在不須要響應時很是有用,例如非關鍵事件日誌記錄。
  • Request/Response:相似Http的請求/響應模型 可是具備Http沒有的優勢,它是異步和多路複用的。
  • Request/Stream:單個請求能夠接收多個響應。例如獲取視頻列表、獲取目錄中的產品
  • Channel: 該模型模型提供雙向通訊。在此模型中,消息流在兩個方向上異步流動。例如發生更改時,從服務器向客戶端發出增量/差別網絡

    5. 前景

    隨着響應式愈來愈被說起,RSocket在網絡通訊的前途是不可限量的。有衆多諸如Facebook、Pivotal等一線大廠的背書。Spring framework最近的幾回更新都特別對其進行了支持。知名rpc框架Dubbo從3開始也針對RSocket進行了適配。目前RSocket還處於候選版本,尚未正式版。相對資料較少。並且須要對Reactive Streams 規範熟悉。相對來講目前學習曲線仍是比較陡峭的。不過咱們能夠從中借鑑一些解決問題的思路。框架

關注公衆號:Felordcn 獲取更多資訊異步

相關文章
相關標籤/搜索