Webflux是什么東東


轉自:百家號-薇薇心語

各位Javaer們,大家都在用SpringMVC吧?當我們不亦樂乎的用着SpringMVC框架的時候,Spring5.x又悄(da)無(zhang)聲(qi)息(gu)的推出了Spring WebFlux。web? 不是已經有SpringMVC這么好用的東西了么,為啥又冒出個WebFlux? 這玩意兒是什么鬼?

Spring WebFlux特性

特性一 異步非阻塞

眾所周知,SpringMVC是同步阻塞的IO模型,資源浪費相對來說比較嚴重,當我們在處理一個比較耗時的任務時,例如:上傳一個比較大的文件,首先,服務器的線程一直在等待接收文件,在這期間它就像個傻子一樣等在那兒(放學別走),什么都干不了,好不容易等到文件來了並且接收完畢,我們又要將文件寫入磁盤,在這寫入的過程中,這根線程又再次懵bi了,又要等到文件寫完才能去干其它的事情。這一前一后的等待,不浪費資源么?

沒錯,Spring WebFlux就是來解決這問題的,Spring WebFlux可以做到異步非阻塞。還是上面那上傳文件的例子,Spring WebFlux是這樣做的:線程發現文件還沒准備好,就先去做其它事情,當文件准備好之后,通知這根線程來處理,當接收完畢寫入磁盤的時候(根據具體情況選擇是否做異步非阻塞),寫入完畢后通知這根線程再來處理(異步非阻塞情況下)。這個用腳趾頭都能看出相對SpringMVC而言,可以節省系統資源。666啊,有木有!

特性二 響應式(reactive)函數編程

如果你覺得java8的lambda寫起來很爽,那么,你會再次喜歡上Spring WebFlux,因為它支持函數式編程,得益於對於reactive-stream的支持(通過reactor框架來實現的),喜歡java8 stream的又有福了。為什么要函數式編程? 這個別問我,我也不知道,或許是因為bi格高吧,哈哈,開玩笑啦。

特性三 不再拘束於Servlet容器

以前,我們的應用都運行於Servlet容器之中,例如我們大家最為熟悉的Tomcat, Jetty...等等。而現在Spring WebFlux不僅能運行於傳統的Servlet容器中(前提是容器要支持Servlet3.1,因為非阻塞IO是使用了Servlet3.1的特性),還能運行在支持NIO的Netty和Undertow中。

所以,看完Spring WebFlux的新特性之后,內心五味雜陳的我,只能用一個表情來形容:

以上就是Spring WebFlux的主要的三大特性,當然,只是簡單的介紹了一下,可能有些javaer對特性一中的所謂的IO模型這個還比較模糊,不要着急,下一次,咱就再介紹一下IO模型,這對后面理解這個框架是很有幫助的。Spring WebFlux是基於reactor框架之上的,reactor框架是對reactive-stream的實現,因此,后面還會詳細介紹這兩個東西,為了去理解Spring WebFlux框架的源碼。

好啦,本篇是《深入淺出Spring Webflux系列》的第一篇,就到此結束啦。

我對自己的表現很滿意,因為在沒包含一行代碼的情況下,居然把口水話都湊足了這么多字,哈哈。。。

另外,還是要到個歉,之前因為賬號被盜,文章被人刪除了,然后還亂發了幾篇什么雜七雜八的廣告文,問過頭條客服,說不能恢復被刪除的文章,這小心臟因此被傷了,所以連續半年多都沒來更新了。

接下來,將更新《深入淺出Spring Webflux系列》等一系列文章,然后可能是JVM調優相關,到時候具體再看情況。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM