spring支持的websocket

首發:我的博客html

必須說明:這篇博文只用於本身記錄,使用spring的websocket支持必定要看官方文檔,權威又簡明,不推薦看不專業又囉嗦的國產博文。html5

已嘗試了兩種方法,固然,無論哪一種方法都要先添加maven依賴:java

<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-websocket</artifactId>  
</dependency>  
<dependency>  
   <groupId>org.springframework</groupId>  
   <artifactId>spring-messaging</artifactId>  
</dependency>  git

<dependency>
    <groupId>javax.websocket</groupId>
    <artifactId>javax.websocket-api</artifactId>
    <version>1.0</version>
</dependency>github

 

第一種方法,對應文檔中的25.2這一節:
1)聲明個Handler組件:web

@Component
public class MyHandler extends TextWebSocketHandler {spring

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) {
        try {
            session.sendMessage(message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }編程

}api

2)在spring配置文件中配置該組件,注意要寫在springmvc的配置文件中而不是spring主配置文件中:瀏覽器

    <!-- websocket配置1 -->
    <websocket:handlers>
        <websocket:mapping path="/myHandler" handler="myHandler"/>
    </websocket:handlers>

固然,添加這段配置以前要在xml的根節點beans節點上補充這個聲明讓spring認識websocket前綴:

    xmlns:websocket="http://www.springframework.org/schema/websocket"

3)這就OK了


第二種方法,對應文檔中的25.4這一節:
實際是參考了官方的引導文檔(必定要看),而後基於參考手冊把java配置改成xml配置了。
1)在某個controller中聲明:

    @MessageMapping("/say")
    @SendTo("/topic/greetings")
    public String greeting(String message) throws Exception {
        return message;
    }

2)在springmvc配置文件中添加:

    <websocket:message-broker application-destination-prefix="/app">
        <websocket:stomp-endpoint path="/hello">
            <websocket:sockjs />
        </websocket:stomp-endpoint>
        <websocket:simple-broker prefix="/topic" />
    </websocket:message-broker>

3)測試的頁面太長了就不貼了,到這裏找吧,在頁面的中下部分。
若是懶得找就看官方提供的示例程序中測試頁面

總結:
websocket的意義在讓瀏覽器和服務器保持長鏈接。
在websocket以前若是想保持長鏈接,或者採用輪詢的方法,或者採用服務器端阻塞的方法,顯然都浪費性能。
若是用服務器端阻塞的話,編程中讀請求(阻塞的)和寫請求(由用戶操做觸發)也是分開的。
websocket直接就分開它們倆了,瀏覽器隨時能夠向服務器中寫指令,服務器也隨時能夠向瀏覽器寫指令,二者都有觸發函數監聽對方。
這是對無狀態的http協議很是重要的補充。
html5技術很大方面就是讓B/S自帶富客戶端編程元素,好比本地存儲,長鏈接這些,這也是單頁面程序興起的重要緣由。
真正是一個頁面就是一個程序,有界面顯示,有操做控件,有臨時數據,有持久數據,有與服務器保持的鏈接。

長期歡迎項目合做機會介紹,項目收入10%用於酬謝介紹人。新浪微博: @冷鏡,QQ:908789432。
相關文章
相關標籤/搜索