国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

徹底搞懂 RSocket 協議

網絡 網絡優化
今天我們系統討論了 RSocket 這款新的高性能網絡通信協議。與 HTTP 協議相比,RSocket 提供了四種不同的交互模式來實現多樣化的網絡通信。

我們知道,常見的 RESTful Web 服務采用的都是基于 HTTP 協議實現的請求 - 響應式交互方式。這種交互方案很簡單,但是因為只支持單一的交互方式,也就無法應對所有日常開發需求場景,例如服務端主動向客戶端推送數據。

請求 - 響應模式請求 - 響應模式

那么,能不能在網絡協議層上具備更加豐富的交互方式呢?答案是肯定的,這就是我們今天要討論的 RSocket 協議。RSocket 協議提供了多種客戶端和服務端之間的交互方式,它并不是對 HTTP 協議的補充,而是一個基于響應式編程技術的全新的、高性能網絡通訊協議。

在引入 RSocket 協議之前,你必須要了解為什么需要這樣一個協議,讓我們從傳統的請求 - 響應模式所存在的問題開始說起。

RSocket 協議解決了什么問題?

請求 - 響應模式的問題

請求 - 響應模式的一個問題是,高并發場景下,性能和響應性上存在瓶頸。因為整個處理過程是同步阻塞的,如果某個請求的響應時間過長,會導致其他請求無法及時響應。這一點我之前在之前的響應式編程一課中有詳細講解。

更重要的是,對很多應用場景來說,HTTP 協議提供的請求 - 響應模式是不合適的。典型的例子是消息推送,如果客戶端需要獲取最新的推送消息,就必須使用輪詢,客戶端不停的發送請求到服務器來檢查更新,無疑這會造成了大量資源浪費。

客戶端輪詢模式客戶端輪詢模式

你可能會說,我們可以使用服務器發送事件(Server-Sent Events,SSE)技術實現從服務端向客戶端推送消息。不過,SSE 也是一個構建在 HTTP 協議上的處理機制,一般只用來傳送文本,提供的功能非常有限。

服務器發送事件服務器發送事件

幸運的是,業界認識到了異步、多向交互通信的必要性。在 2015 年,RSocket 協議就在這樣的背景下誕生了。

RSocket 協議的解決方案

RSocket 是一種語言無關的二進制網絡協議,用來解決現有網絡傳輸協議存在的單一請求 - 響應模式以及性能問題。那么,它是怎么解決這個問題的呢?

RSocket 以異步消息的方式提供 4 種交互模式,除了請求 - 響應(request/response)模式之外,還包括請求 - 響應流(request/stream)、即發即棄(fire-and-forget)和通道(channel)這三種新的交互模式。

RSocket 協議的四種交互模式RSocket 協議的四種交互模式

我們來看這四種交互模式的特點:

請求 - 響應模式:這是最典型也最常見的模式。發送方在發送消息給接收方之后,等待與之對應的響應消息

請求 - 響應流模式:發送方的每個請求消息,都對應接收方的一個消息流作為響應

即發即忘模式:發送方的請求消息沒有與之對應的響應

通道模式:在發送方和接收方之間建立一個雙向傳輸的通道

我們可以從請求與響應的數量對應關系來對上述四種交互模式做一個總結。

可以看到,當我們選擇具體的交互模式時,請求 - 響應、請求 - 響應流和即發即忘這三種交互模式的請求數量都是 1,并能夠獲取不同數量的響應結果。我們就可以根據這一特性來重構現有的請求處理過程。而通道模式則比較特殊,它的請求數量和響應數量都是 N,決定了我們可以選擇它來應對雙向的數據流處理場景。

RSocket 協議專門設計用來和響應式編程技術風格的應用程序配合使用,在使用 RSocket 協議時,響應式編程體系中的數據流機制仍然有效。

為了更好的理解 RSocket 協議,我們對比它和 HTTP 協議。在交互模式上,與 HTTP 的請求 - 響應這種單向交互模式不同,RSocket 倡導的是對等通信。這種對等通信不是傳統單向交互模式的改進,而是在客戶端和服務端之間可以自由的相互發送和處理請求。

RSocket 協議的交互方式RSocket 協議的交互方式

另一方面,從性能上講,我們知道 HTTP 協議為了兼容各種應用方式,本身有一定的復雜性和冗余性,性能一般。而 RSocket 采用的是自定義二進制協議,本身的定位就是高性能通訊協議,性能上比 HTTP 高出一個數量級。

如何正確使用 RSocket 協議?

到這里,我們就明白了 RSocket 協議是要解決什么問題,以及是如何解決的了。接下來,我們具體看看如何正確使用 RSocket 協議。

RSocket 接口

我們先來看一下 RSocket 協議中最核心的接口,即 RSocket 接口的定義,如下所示。

public interface RSocket extends Availability, Closeable {
 //推送元信息,數據可以自定義
 Mono<Void> metadataPush(Payload payload);
    //請求-響應模式,發送一 個請求并接收一個響應
 Mono<Payload> requestResponse(Payload payload);
    //即發-即忘模式,請求-響應的優化,在不需要響應時非常有用
    Mono<Void> fireAndForget(Payload payload);
    //請求-響應流模式,類似于返回集合的請求/響應,集合將以流的方式返回,而不是等到查詢完成
    Flux<Payload> requestStream(Payload payload);
    //通道模式,允許任意交互模型的雙向消息流
    Flux<Payload> requestChannel(Publisher<Payload> payloads);
}

顯然,RSocket 接口通過四個方法分別實現了它所提供的四種交互模式,這里的 Payload 代表的就是一種消息對象,由兩部分組成,即元信息 metadata 和數據 data,類似于常見的消息通信中的消息頭和消息體的概念。

同時,你注意到嗎,這里出現了兩個新的數據結構 Mono 和 Flux。在響應式編程中,Mono 代表只包含 0 個或 1 個元素的數據流,而對應的 Flux 則是一個包含 0 到 n 個元素的數據流。

所以 fireAndForget() 方法返回的是一個 Mono 流,符合即發 - 即棄模式的語義。而 requestStream() 作為請求 - 響應流模式的實現,與 requestResponse() 的區別在于它的返回值是一個 Flux 流,而不是一個 Mono 對象。而且,RSocket 提供的請求 - 響應模式也比 HTTP 更具優勢,因為它是異步且多路復用的。

另一方面,與其他方法不同,requestChannel() 方法返回的并不是一個 Payload 消息對象,而是一個代表響應式流的 Publisher 對象,意味著這種模式下的輸入輸出都是響應式流,也就是說可以實現客戶端和服務端之間的雙向交互,這也和通道模式的定義一致。

RSocket 與框架集成

RSocket 接口過于底層,開發人員需要考慮服務器端和客戶端的具體構建方式以及手工實現遠程調用的細節。所以,我通常不建議直接使用 RSocket 接口進行應用程序的開發,而是傾向于借助特定的開發框架。如果你使用的是 Spring Boot 框架,就可以構建如下所示一個簡單 Controller:

@Controller
public class HelloController {
 @MessageMapping("hello")
 public Mono<String> hello(String name) {
   return Mono.just("Hello: " + name);
 }
}

這里引入了一個新的注解@MessageMapping,類似 Spring MVC 中的@RequestMapping 注解,@MessageMapping 是,Spring 中提供,用來指定 RSocket 協議中消息處理的目的地。然后,我們輸入了一個 String 類型的參數并返回一個 Mono 對象,符合請求 - 響應交互模式的定義。

為了訪問這個 RSocket 端點,我們需要構建一個 RSocketRequester 請求對象。基于該對象,我們就可以通過它的 route() 方法路由到前面通過@MessageMapping 注解構建的"hello"端點,如下所示:

Mono<String> response = requester.route("hello")
        .data("Geektime")
        .retrieveMono(String.class);

我們再來看一個請求 - 響應流的示例,如下所示:

@MessageMapping("stream")
Flux<Message> stream(Request request) {
       return Flux
               .interval(Duration.ofSeconds(1))
               .map(index -> new Message(request.getParam, index));
}

這里我們根據輸入的 Request 對象,返回一個 Flux 流,每一秒發送一個新的 Message 對象。

如果你想在其他框架中使用 RSocket 協議,也有很多選擇。Dubbo 在 3.0.0-SNAPSHOT 版本里基于 RSocket 對響應式編程提供了支持,開發人員可以非常方便的使用 RSocket 的 API。而隨著 Spring 框架的持續升級,5.2 版本中也把 RSocket 作為缺省的網絡通信協議。

目前,RSocket 協議的應用已經越來越廣泛。相信隨著這項技術的不斷成熟,日常開發過程中也會出現更多的應用場景和解決方案。

總結

今天我們系統討論了 RSocket 這款新的高性能網絡通信協議。與 HTTP 協議相比,RSocket 提供了四種不同的交互模式來實現多樣化的網絡通信。同時,RSocket 也無縫集成了響應式編程技術,我們可以通過 RSocket 協議來實現異步、非阻塞式的網絡通信。

責任編輯:武曉燕 來源: 程序猿技術充電站
相關推薦

2025-06-30 00:32:43

策略模式算法MyBatis

2017-12-05 17:44:31

機器學習CNN卷積層

2020-10-14 08:50:38

搞懂 Netty 線程

2025-05-06 01:14:00

系統編程響應式

2024-01-03 13:39:00

JS,Javascrip算法

2023-10-18 10:55:55

HashMap

2025-04-11 05:55:00

2025-01-13 16:00:00

服務網關分布式系統架構

2021-10-11 11:58:41

Channel原理recvq

2021-10-09 19:05:06

channelGo原理

2025-03-17 00:21:00

2023-05-29 08:12:38

2020-04-15 08:00:00

計算機網絡通信設備通信協議

2021-12-29 17:29:07

KubernetesEvents集群

2025-07-01 06:05:34

2023-09-28 08:15:05

SpringBean加載

2021-07-08 10:08:03

DvaJS前端Dva

2025-04-21 00:50:50

2022-04-12 08:00:17

socket 編程網絡編程網絡 IO 模型

2020-12-07 06:19:50

監控前端用戶
點贊
收藏

51CTO技術棧公眾號

中文字幕国产一区二区| 午夜亚洲视频| 亚洲一区不卡| 国内精品久久国产| 精品精品99| 最近免费中文字幕视频2019| 97人人香蕉| 成人影院入口| 欧美日韩国产综合一区二区 | 亚州国产精品久久久| 四虎国产精品永远| 欧美精品99| 亚洲xxxxx性| 四虎影视精品| 午夜精品一区二区三区三上悠亚| 亚洲va欧美va国产综合久久| 久久精品国产免费看久久精品| 一道精品一区二区三区| 亚洲国产国产亚洲一二三| 欧美日韩视频免费在线观看| 成人日韩在线观看| 欧美成人精品xxx| 欧美黑人一区| 男女羞羞网站| 99在线热播精品免费| 日本精品国语自产拍在线观看| 欧美国产一区二区三区激情无套| 欧美福利视频网站| 日本黄色成人| 亚洲视频综合网| av在线私库| 精品日韩一区二区| 3d玉蒲团在线观看| 91精品国产综合久久香蕉的特点| 黄网在线观看| 欧美日韩国产中文字幕 | 久久天堂电影网| 九色porny丨入口在线| 欧美成人r级一区二区三区| 日本高清视频在线观看| 欧美日韩一卡二卡三卡| 日韩伦理在线观看| 欧美高清dvd| 青春草在线免费视频| 亚洲精品一区二区三区香蕉| 国产一二三在线| 国产一区二区三区在线免费观看| 秋霞国产精品| 九九热最新视频//这里只有精品 | 亚洲h片在线看| 91精品午夜视频| free性欧美| 中文字幕国内精品| 激情视频亚洲| 国产91精品在线播放| 99热国内精品永久免费观看| www久久99| 蜜臀久久99精品久久久久宅男| 欧美日韩午夜爽爽| 国产视频一区在线观看| av毛片免费| 色综合色综合色综合色综合色综合 | 亚洲成色www8888| 黄页网站大全在线免费观看| 国产一区二区动漫| 激情小说亚洲色图| 亚洲综合自拍一区| 久久99国产精品尤物| 久久婷婷国产91天堂综合精品| ...中文天堂在线一区| 少妇激情av一区二区| 欧美美女直播网站| 一区二区三区短视频| 久久久久九九九九| 欧美午夜视频| 99在线免费视频观看| 亚洲免费大片在线观看| 精品国产白色丝袜高跟鞋| 欧美日韩伦理片| 欧美日韩亚洲高清一区二区| 丁香六月综合| 欧美在线亚洲在线| 性色一区二区| 嫩草影院国产精品| 欧美精品在线视频| 亚洲国产一区二区三区网站| 国产v亚洲v天堂无码| 成人性视频免费网站| 在线观看的av网站| 亚洲人av在线影院| 日韩免费av| 4444亚洲人成无码网在线观看| 一区二区三区在线高清| 丰满大乳少妇在线观看网站| 欧美亚洲成人网| 喷水一区二区三区| 在线影院自拍| 亚洲视频在线免费看| 伊人色**天天综合婷婷| 国产成人无码a区在线观看视频| 91福利视频网站| 国产精品视频首页| 日韩免费电影一区二区| 亚洲精品久久久久久国产精华液| av日韩中文| 91九色对白| 中文字幕一区二区三区av| 人狥杂交一区欧美二区| 91亚洲精品一区二区| 国产亚洲一区二区在线观看| 美女精品导航| 99在线首页视频| 中文字幕一区二区三区av| 你懂得影院夜精品a| 欧美高清性xxxxhd| 午夜视频在线观看一区二区三区| 精品久久久网| 一区二区三区我不卡| 欧美无乱码久久久免费午夜一区| 日韩超碰人人爽人人做人人添| 国产毛片久久久久久国产毛片| 9191久久久久久久久久久| 日韩欧美视频专区| 成人亚洲成人影院| 日韩一区二区欧美| 韩国理伦片一区二区三区在线播放| 91露出在线| 亚洲字幕在线观看| 五月婷婷激情综合| 国产无遮挡裸体免费久久| 青青青青草视频| 精品999在线播放| 中文字幕一区二区三区乱码图片 | 亚洲欧美偷拍卡通变态| 高清成人在线| 亚洲图色在线| 日韩欧美一区二区在线视频| 香蕉av一区二区| 国产真实生活伦对白| 久久艳片www.17c.com| 国产999精品久久久久久| 97蜜桃久久| 亚洲一二区在线| 亚洲高清免费观看高清完整版| 国产精品普通话对白| 国产视频三级在线观看播放| 成人黄色在线观看| 亚洲va天堂va国产va久| 日本一本不卡| 一级片免费看| 国产精品入口尤物| 午夜精品影院在线观看| 大胆日韩av| 深夜福利免费在线观看| 亚洲自拍欧美另类| 色嗨嗨av一区二区三区| 欧美91视频| 欧美日韩国产精品一卡| 91久久国产最好的精华液| 亚洲一区色图| www.中文字幕久久久| 久久精品二区| 亚洲精品一区二区三区香蕉| 久久er99热精品一区二区| gay欧美网站| 欧美另类videosbestsex日本| 在线成人一区二区| 国产午夜精品一区二区三区视频| 成人爽a毛片免费啪啪红桃视频| 九七影院97影院理论片免费| 国产精品久久一区| 在线精品国精品国产尤物884a| 国产精品毛片| 中文字幕色婷婷在线视频| 成年人午夜视频在线观看| 欧美精品video| 亚洲一区二区在线观看视频| 欧美色图天堂| 色婷婷777777仙踪林| 久久精品欧美视频| 亚洲最大的成人av| 亚洲黄色大片| 成人免费看黄| 成人漫画网站免费| 91久久久一线二线三线品牌| 欧美成人国产一区二区| 99精品一区二区三区| 国内亚洲精品| 成人免费看片| 六月丁香激情网| 国产精品小说在线| 欧美精品在线观看一区二区| 成人a免费在线看| 国产精品一线天粉嫩av| 国产美女在线观看| 国产福利一区视频| 亚洲一区二区久久久久久| 日韩成人av网| 亚洲一区在线免费观看| 蜜臀av性久久久久蜜臀av麻豆|