原鏈接:http://blog.csdn.net/canot/article/details/52575054
WebSocker是一個保持web客戶端與服務器長鏈接的技術。這樣在兩者通信過程中如果服務器有消息發送給客戶端,就無需等待web客戶端發送一個請求了(HTTP協議是請求相應式,如果沒有Web客戶端的請求,服務器是無法對客戶端做相應的)。
單獨的部署一個WebSocket服務器很簡單,只需要幾個注解即可。那么當在spring項目中如何使用WebSocket呢?也行你會想,沒什么不同啊。一樣通過WebSocket注解就可以了啊。但我們使用Spring的目的就是通過Spring的容器來管理Bean,將WebSocket獨立出來如果WebSocket中需要用到Spring容器中的bean該怎么辦?
Spring 提供了兩種將WebSocket部署在Spring容器中的方法:
方法一:
使用org.springframework.web.socket.server.standard.ServerEndpointExporter.ServerEndpointExporter類。在Spring容器中添加一個該類的實例:
@Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); }
Spring容器會去掃描包,將WebSocket加入容器。此時對於WebSocket則使用Spring的注解:
@ServerEndpoint(value="/getLocation",configurator = SpringConfigurator.class) @Component public class TransmissionLocationWebSocket { xxxx }
SpringConfigurator.class 為Spring提供的一個類。通過這個類,該WebSocket中就可以注入Spring容器的bean。
方法二:
使用Spring封裝的WebSocket接口TextWebSocketHandler。
public class WebSocketHandler extends TextWebSocketHandler { /** * 連接成功時候 */ @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { } /** * 連接關閉時候 */ @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception { } }
將類添加到Spring容器中,並配置:
@Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/getLocation").setAllowedOrigins("*"); } @Bean public WebSocketHandler myHandler() { return new WebSocketHandler(); }
Spring與WebScoket的配置即如上兩個方法。