新聞中心
[[413857]]
本文轉(zhuǎn)載自微信公眾號「Java時(shí)間屋」,作者 Jack佳。轉(zhuǎn)載本文請聯(lián)系一個Java時(shí)間屋公眾號。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了崆峒免費(fèi)建站歡迎大家使用!
- 前言
- 1.什么是響應(yīng)式編程:
- 2.使用spring-boot-starter-webflux:
- 3.Jetty、tomcat、undertow、netty怎么區(qū)分:
- 總結(jié)
前言
現(xiàn)在網(wǎng)關(guān)都采用spring-cloud-gateway,我們看使用過程中發(fā)現(xiàn)編碼已經(jīng)采用響應(yīng)式編程,直接集成了spring-boot-starter-webflux依賴,這就捎帶著把響應(yīng)式編程帶火了一把。本文結(jié)合我的理解對響應(yīng)式編程做一個總結(jié)性的介紹,希望能幫助到大家。
1.什么是響應(yīng)式編程:
提到響應(yīng)式編程,跟傳統(tǒng)的編程區(qū)別可能剛開始不太好區(qū)分,其中最重要的區(qū)別就是傳統(tǒng)的是阻塞的,響應(yīng)式編程是非阻塞異步。官網(wǎng)介紹響應(yīng)式編程:
- In computing, reactive programming is an asynchronous programming paradigm
- concerned with data streams and the propagation of change.
- This means that it becomes possible to express static (e.g. arrays) or
- dynamic (e.g. event emitters) data streams with ease via the employed
- programming language(s), and that an inferred dependency within the
- associated execution model exists, which facilitates the automatic propagation of
- the change involved with data flow.
- 在計(jì)算機(jī)領(lǐng)域,響應(yīng)式編程是一個專注于數(shù)據(jù)流和變化傳遞的異步編程范式。
- 這意味著可以使用編程語言很容易地表示靜態(tài)(例如數(shù)組)或動態(tài)(例如事件發(fā)射器)數(shù)據(jù)流,
- 并且在關(guān)聯(lián)的執(zhí)行模型中,存在著可推斷的依賴關(guān)系,這個關(guān)系的存在有利于自動傳播與數(shù)據(jù)流有關(guān)的更改。
在計(jì)算機(jī)領(lǐng)域,響應(yīng)式編程是一個專注于數(shù)據(jù)流和變化傳遞的異步編程范式。
這意味著可以使用編程語言很容易地表示靜態(tài)(例如數(shù)組)或動態(tài)(例如事件發(fā)射器)數(shù)據(jù)流,
并且在關(guān)聯(lián)的執(zhí)行模型中,存在著可推斷的依賴關(guān)系,這個關(guān)系的存在有利于自動傳播與數(shù)據(jù)流有關(guān)的更改。
可能這段話還是不好理解,但是可以著重看下數(shù)據(jù)變化,響應(yīng)式編程就是基于數(shù)據(jù)變化的新的編程模式,實(shí)現(xiàn)異步非阻塞,就是當(dāng)請求來了之后進(jìn)行訂閱數(shù)據(jù)的變化,后續(xù)業(yè)務(wù)處理發(fā)布變化,然后進(jìn)行監(jiān)聽到變化,進(jìn)行響應(yīng)。而傳統(tǒng)的springmvc則是創(chuàng)建新線程等待阻塞,知道請求完畢,釋放線程的過程。
2.使用spring-boot-starter-webflux:
比較經(jīng)典的圖示:
從圖中我們可以看到基于spring-webmvc和spring-webflux的路線和區(qū)別。其中webflux默認(rèn)是使用netty的通信框架作為web容器,相比較tomcat,netty的優(yōu)勢不再贅述了,并發(fā)高、傳輸快、封裝好,其中netty的零拷貝等等。我們在使用webflux的時(shí)候注意兩個需要經(jīng)常使用的對象Mono和Flux:
| Mono | Flux |
|---|---|
| 實(shí)現(xiàn)發(fā)布者,并返回 0 或 1 個元素,即單對象 | 實(shí)現(xiàn)發(fā)布者,并返回 N 個元素,即 List 列表對象 |
3.Jetty、tomcat、undertow、netty怎么區(qū)分:
tomcat:市場占有率仍然非常高,雖然性能上跟其他web服務(wù)器比較會有欠缺,但是因?yàn)槠涑墒?,?shí)踐度很高。undertow和Jetty都是基于NIO實(shí)現(xiàn)高并發(fā)的輕量級服務(wù)器,支持servlet3.1和websocket springboot2以后增加了webflux的web容器,而webflux是基于netty的,netty是nio的,加上其零拷貝的實(shí)現(xiàn),保證其性能上占據(jù)優(yōu)勢。
3.1 springboot中使用jetty:
org.springframework.boot spring-boot-starter-parent 1.5.10.RELEASE org.springframework.boot spring-boot-starter-web spring-boot-starter-tomcat org.springframework.boot org.springframework.boot spring-boot-starter-jetty
3.2 springboot中使用Webflux/Netty:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow
總結(jié)
其實(shí)Spring提供的webflux框架簡化了我們操作Netty使用的復(fù)雜性,提供了Reactor Netty庫,因?yàn)榫W(wǎng)關(guān)性能的要求,所有spring-cloud-gateway直接集成了webflux,使用Netty的nio的特性極大的滿足了網(wǎng)關(guān)高并發(fā),高性能要求的場景,個人覺得不見得響應(yīng)式編程未來會遍地開發(fā),但是網(wǎng)關(guān)這種特殊的場景確實(shí)比較適合響應(yīng)式編程的應(yīng)用。
新聞標(biāo)題:90-Webflux響應(yīng)式編程怎么去理解?
文章源于:http://m.5511xx.com/article/dhpooeh.html


咨詢
建站咨詢
