小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Spring WebSocket詳解

 LZS2851 2017-06-01

Spring WebSocket詳解

作者:chszs,轉(zhuǎn)載需注明。博客主頁(yè):http://blog.csdn.net/chszs

spring框架從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ā)送事件等。
需要理解一點(diǎn),在使用WebSocket協(xié)議前,需要先使用HTTP協(xié)議用于構(gòu)建最初的握手。這依賴于一個(gè)機(jī)制——建立HTTP,請(qǐng)求協(xié)議升級(jí)(或叫協(xié)議轉(zhuǎn)換)。當(dāng)服務(wù)器同意后,它會(huì)響應(yīng)HTTP狀態(tài)碼101,表示同意切換協(xié)議。假設(shè)通過(guò)TCP套接字成功握手,HTTP協(xié)議升級(jí)請(qǐng)求通過(guò),那么客戶端和服務(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ì)上的考慮。
目前REST架構(gòu)是一個(gè)廣泛接受、易于理解、適合構(gòu)建現(xiàn)代Web應(yīng)用的架構(gòu)。REST架構(gòu)依賴于很多URL、和幾個(gè)HTTP方法,使用了鏈接、保持無(wú)狀態(tài)等原則。
相比之下WebSocket應(yīng)用可能只使用一個(gè)URL用于最初的HTTP握手。隨后所有的消息都共享此TCP連接,消息在此連接上雙向流動(dòng)。這一點(diǎn)可見,它與REST架構(gòu)是完全不同的,是異步的、事件驅(qū)動(dòng)的、消息傳遞的架構(gòu)。WebSocket架構(gòu)與傳統(tǒng)的消息傳輸方案(如JMS、AMQP)比較相似。

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)解釋消息。
與HTTP協(xié)議不同,WebSocket協(xié)議只是一個(gè)應(yīng)用級(jí)的協(xié)議,它非常簡(jiǎn)單,并不能理解傳入的消息,也不能對(duì)消息進(jìn)行路由或處理。因此WebSocket協(xié)議是應(yīng)用級(jí)協(xié)議的底層,其上需要一個(gè)框架來(lái)理解和處理消息。
出于這個(gè)原因,WebSocket RFC定義了子協(xié)議的使用。在握手過(guò)程中,客戶端和服務(wù)器端可以使用Header部分的Sec-WebSocket-Protocol來(lái)協(xié)商使用的子協(xié)議——也即使用更高級(jí)的應(yīng)用級(jí)協(xié)議。子協(xié)議的使用不是必須的,但即使不使用子協(xié)議,應(yīng)用程序仍然需要選擇一個(gè)消息格式——讓客戶端和服務(wù)器相互可以理解的格式。這種格式可以自定義,或特定于框架,或使用標(biāo)準(zhǔn)的消息傳遞協(xié)議。

Spring框架提供了對(duì)使用STOMP子協(xié)議的支持。
STOMP,Streaming Text Orientated Message Protocol,流文本定向消息協(xié)議。STOMP是一個(gè)簡(jiǎn)單的消息傳遞協(xié)議, 是一種為MOM(Message Oriented Middleware,面向消息的中間件)設(shè)計(jì)的簡(jiǎn)單文本協(xié)議。
STOMP提供了一個(gè)可互操作的連接格式,允許STOMP客戶端與任意STOMP消息代理(Broker)進(jìn)行交互,類似于OpenWire協(xié)議(一種二進(jìn)制協(xié)議)。

5、什么場(chǎng)景下該使用WebSocket

在Web應(yīng)用中,客戶端和服務(wù)器端需要以較高頻率和較低延遲來(lái)交換事件時(shí),適合用WebSocket。因此WebSocket適合財(cái)經(jīng)、游戲、協(xié)作等應(yīng)用場(chǎng)景。
對(duì)于其他應(yīng)用場(chǎng)景則未必適合。例如,某個(gè)新聞?dòng)嗛喰枰@示突發(fā)新聞,使用間隔幾分鐘的長(zhǎng)輪詢也是可以的,這里的延遲可以接受。
即使在要求低延遲的應(yīng)用場(chǎng)景,如果傳輸?shù)南?shù)很低(比如監(jiān)測(cè)網(wǎng)絡(luò)故障的場(chǎng)景),那么應(yīng)該考慮使用長(zhǎng)輪詢技術(shù)。

而只有在低延遲和高頻消息通信的場(chǎng)景下,選用WebSocket協(xié)議才是非常適合的。即使是這樣的應(yīng)用場(chǎng)景,仍然存在是選擇WebSocket通信呢?又或者是選擇REST HTTP通信呢?
答案是會(huì)根據(jù)應(yīng)用程序的需求而定。但是,也可能同時(shí)使用這兩種技術(shù),把需要頻繁交換的數(shù)據(jù)放到WebSocket中實(shí)現(xiàn),而把REST API作為過(guò)程性的業(yè)務(wù)的實(shí)現(xiàn)技術(shù)。另外,當(dāng)REST API的調(diào)用中需要把某個(gè)信息廣播給多個(gè)客戶端是,也可以通過(guò)WebSocket連接來(lái)實(shí)現(xiàn)。

Spring框架提供了@Controller注釋和@RestController注釋,兩者都可以用于HTTP請(qǐng)求的處理以及WebSocket消息的處理。另外,Spring MVC的請(qǐng)求處理方法,或其它應(yīng)用程序的請(qǐng)求處理方法,都可以很容易地使用WebSocket協(xié)議來(lái)廣播消息到所有感興趣的客戶端或指定用戶。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多