javascript
三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案
前言
每當(dāng)使用SpringBoot進(jìn)行Weboscket開發(fā)時(shí),最容易想到的就是spring-boot-starter-websocket(或spring-websocket)。它可以讓我們使用注解,很簡單的進(jìn)行Websocket開發(fā),讓我們更多的關(guān)注業(yè)務(wù)邏輯。它底層使用的是Tomcat,且不說把整個(gè)Tomcat放進(jìn)一個(gè)WebSocket服務(wù)中是否會(huì)太重,但在大數(shù)據(jù)量高并發(fā)的場(chǎng)景下,它的表現(xiàn)并不是非常理想。
Netty一款高性能的NIO網(wǎng)絡(luò)編程框架,在推送量激增時(shí),表現(xiàn)依然出色。(關(guān)于性能與表現(xiàn)的討論,網(wǎng)上很多,這里不過多說明。)很多流行開源項(xiàng)目都在使用Netty,如:Dubbo、Storm、Spark、Elasticsearch、Apache Cassandra等,這得益于Netty的并發(fā)高、傳輸快、封裝好等特點(diǎn)。
但是,要在SpringBoot項(xiàng)目中整合Netty來開發(fā)WebSocket不是一件舒服的事,這會(huì)讓你過多的關(guān)注非業(yè)務(wù)邏輯的實(shí)現(xiàn)。那么,是否有一款框架,能使得在SpringBoot項(xiàng)目中使用Netty開發(fā)WebSocket變得簡單,甚至優(yōu)雅,并且可以從使用spring-boot-starter-websocket開發(fā)的項(xiàng)目無縫的遷移過來呢?
netty-websocket-spring-boot-starter
這是個(gè)開源的框架。通過它,我們可以像spring-boot-starter-websocket一樣使用注解進(jìn)行開發(fā),只需關(guān)注需要的事件(如OnMessage)。并且底層是使用Netty,當(dāng)需要調(diào)參的時(shí)候只需要修改配置參數(shù)即可,無需過多的關(guān)心handler的設(shè)置。
快速入門
-
創(chuàng)建SpringBoot項(xiàng)目(v2.0.0以上)并添加依賴:
-
new一個(gè)ServerEndpointExporter對(duì)象,交給Spring容器,表示要開啟WebSocket功能:
-
在端點(diǎn)類上加上@ServerEndpoint、@Component注解,并在相應(yīng)的方法上加上@OnOpen、@OnClose、@OnError、@OnMessage注解(不想關(guān)注某個(gè)事件可不添加對(duì)應(yīng)的注解):
-
一個(gè)高性能的WebSocket服務(wù)端就完成了,直接run起來就可以了。
測(cè)試
-
服務(wù)端是寫完了,接下來需要測(cè)試一下,看看效果
-
首先,新建一個(gè)html文件,把頁面擼出來
-
頁面擼完,直接用Chrome打開上面html文件即可連上你的WebSocket服務(wù)。
總結(jié)
這個(gè)框架是基于Netty的,所以直接使用Netty優(yōu)化時(shí)的理念即可。如:堆外內(nèi)存的0拷貝、接收及發(fā)送緩沖區(qū)的調(diào)整、高低寫水位的調(diào)整等。
生產(chǎn)環(huán)境的項(xiàng)目在充分調(diào)優(yōu)后,Netty甚至能比Tomcat高效20倍。(當(dāng)然,這是特定的場(chǎng)景下)
框架詳細(xì)文檔:https://github.com/YeautyYE/netty-websocket-spring-boot-starter
總結(jié)
以上是生活随笔為你收集整理的三分钟构建高性能 WebSocket 服务 | 超优雅的 SpringBoot 整合 Netty 方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解读:大数据在电信行业的五大应用
- 下一篇: 一文告诉你 Java RMI 和 RPC