Spring WebSocket詳解作者:chszs,轉(zhuǎn)載需注明。博客主頁(yè):http://blog.csdn.net/chszsspring框架從4.0版開始支持WebSocket,下面我將詳述Spring WebSocket庫(kù)的相關(guān)內(nèi)容。內(nèi)容包括Spring框架是如何在Web應(yīng)用中支持WebSocket方式的消息通信,以及如何利用STOMP協(xié)議作為應(yīng)用層的協(xié)議——WebSocket的子協(xié)議。 1、WebSocket協(xié)議介紹WebSocket協(xié)議是RFC-6455規(guī)范定義的一個(gè)Web領(lǐng)域的重要的功能:全雙工,即客戶端和服務(wù)器之間的雙向通信。它是一個(gè)令人興奮的功能,業(yè)界在此領(lǐng)域上已經(jīng)探索很久,使用的技術(shù)包括Java Applet、XMLHttpRequest、Adobe Flash、ActiveXObject、各種Comet技術(shù)、服務(wù)器端的發(fā)送事件等。 Spring框架4.0以上版本引入了一個(gè)新模塊,即spring-websocket模塊。它對(duì)WebSocket通信提供了支持。它兼容Java WebSocket API規(guī)范JSR-356,同時(shí)提供了額外的功能 2、WebSocket的降級(jí)選項(xiàng)瀏覽器對(duì)WebSocket的支持并不快,IE瀏覽器是第10版才開始支持的。此外,一些代理工具也會(huì)限制WebSocket通信。因此,即使是現(xiàn)在要開發(fā)WebSocket應(yīng)用,降級(jí)選項(xiàng)是必不可少的,以便在不支持的場(chǎng)景使用模擬WebSocket API的工作方式。Spring框架提供了這種透明的降級(jí)方案——使用SockJS協(xié)議。此方案可以通過(guò)配置來(lái)自動(dòng)切換,無(wú)需修改應(yīng)用程序的代碼。 3、消息通信架構(gòu)使用WebSocket除了開發(fā)方面的挑戰(zhàn)外,還有一個(gè)難點(diǎn)在于設(shè)計(jì)上的考慮。 Spring框架4.0引入了一個(gè)新模塊——spring-messaging模塊,它包含了很多來(lái)自于Spring Integration項(xiàng)目中的概念抽象,比如:Message消息、消息頻道MessageChannel、消息句柄MessageHandler等。此模塊還包括了一套注釋,可以把消息映射到方法上,與Spring MVC基于注釋的編程模型相似。 4、WebSocket支持子協(xié)議WebSocket只是一個(gè)消息傳遞的體系結(jié)構(gòu),它沒有指定任何特定的消息傳遞協(xié)議。它是一個(gè)TCP協(xié)議之上的超薄層,可以把字節(jié)流轉(zhuǎn)換成消息流(文本貨二進(jìn)制)。隨后由應(yīng)用程序來(lái)解釋消息。 Spring框架提供了對(duì)使用STOMP子協(xié)議的支持。 5、什么場(chǎng)景下該使用WebSocket在Web應(yīng)用中,客戶端和服務(wù)器端需要以較高頻率和較低延遲來(lái)交換事件時(shí),適合用WebSocket。因此WebSocket適合財(cái)經(jīng)、游戲、協(xié)作等應(yīng)用場(chǎng)景。 而只有在低延遲和高頻消息通信的場(chǎng)景下,選用WebSocket協(xié)議才是非常適合的。即使是這樣的應(yīng)用場(chǎng)景,仍然存在是選擇WebSocket通信呢?又或者是選擇REST HTTP通信呢? Spring框架提供了@Controller注釋和@RestController注釋,兩者都可以用于HTTP請(qǐng)求的處理以及WebSocket消息的處理。另外,Spring MVC的請(qǐng)求處理方法,或其它應(yīng)用程序的請(qǐng)求處理方法,都可以很容易地使用WebSocket協(xié)議來(lái)廣播消息到所有感興趣的客戶端或指定用戶。 |
|
來(lái)自: LZS2851 > 《WebSocket》