Spring - Websocket详细配置

来源:互联网 发布:阿里云如何域名解析 编辑:程序博客网 时间:2024/05/23 01:23

import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.config.annotation.EnableWebSocket;import org.springframework.web.socket.config.annotation.WebSocketConfigurer;import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;@Configuration@EnableWebMvc@EnableWebSocketpublic class WebSocketConfig extends WebMvcConfigurerAdapter implements        WebSocketConfigurer {    public WebSocketConfig() {    }    @Override    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {        registry.addHandler(systemWebSocketHandler(), "/websck").addInterceptors(new HandshakeInterceptor()).setAllowedOrigins("http://localhost");        System.out.println("registed!");        registry.addHandler(systemWebSocketHandler(), "/sockjs/websck/info").addInterceptors(new HandshakeInterceptor()).setAllowedOrigins("http://localhost")                .withSockJS();    }    @Bean    public WebSocketHandler systemWebSocketHandler() {        //return new InfoSocketEndPoint();        return new SystemWebSocketHandler();    }}

 

@Componentpublic class SystemWebSocketHandler implements WebSocketHandler {    @Override    public void afterConnectionEstablished(WebSocketSession session) throws Exception {        System.out.println("connect to the websocket success......");        session.sendMessage(new TextMessage("Server:connected OK!"));    }    @Override    public void handleMessage(WebSocketSession wss, WebSocketMessage<?> wsm) throws Exception {        TextMessage returnMessage = new TextMessage(wsm.getPayload()            + " received at server");      wss.sendMessage(returnMessage);    }    @Override    public void handleTransportError(WebSocketSession wss, Throwable thrwbl) throws Exception {        if(wss.isOpen()){            wss.close();        }       System.out.println("websocket connection closed......");    }    @Override    public void afterConnectionClosed(WebSocketSession wss, CloseStatus cs) throws Exception {        System.out.println("websocket connection closed......");    }    @Override    public boolean supportsPartialMessages() {        return false;    }    }

import org.springframework.stereotype.Component;import org.springframework.web.socket.TextMessage;import org.springframework.web.socket.WebSocketSession;import org.springframework.web.socket.handler.TextWebSocketHandler;@Componentpublic class InfoSocketEndPoint extends TextWebSocketHandler {   public InfoSocketEndPoint() {      // TODO Auto-generated constructor stub   }   @Override   protected void handleTextMessage(WebSocketSession session,         TextMessage message) throws Exception {      // TODO Auto-generated method stub      super.handleTextMessage(session, message);      TextMessage returnMessage = new TextMessage(message.getPayload()            + " received at server");      session.sendMessage(returnMessage);   }/* @Override   protected void handleBinaryMessage(WebSocketSession arg0, BinaryMessage arg1) {      // TODO Auto-generated method stub      super.handleBinaryMessage(arg0, arg1);   }*/      }

 

import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.stereotype.Component;import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;import java.util.Map;@Componentpublic class HandshakeInterceptor extends HttpSessionHandshakeInterceptor {   @Override   public boolean beforeHandshake(ServerHttpRequest request,         ServerHttpResponse response, WebSocketHandler wsHandler,         Map<String, Object> attributes) throws Exception {      System.out.println("Before Handshake");      return super.beforeHandshake(request, response, wsHandler, attributes);   }   @Override   public void afterHandshake(ServerHttpRequest request,         ServerHttpResponse response, WebSocketHandler wsHandler,         Exception ex) {      System.out.println("After Handshake");      super.afterHandshake(request, response, wsHandler, ex);   }}


<%@ page language="java" contentType="text/html; charset=UTF-8"       pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head>   <title>WebSocket/SockJS Echo Sample (Adapted from Tomcat's echo sample)</title>   <style type="text/css">      #connect-container {         float: left;         width: 400px      }      #connect-container div {         padding: 5px;      }      #console-container {         float: left;         margin-left: 15px;         width: 400px;      }      #console {         border: 1px solid #CCCCCC;         border-right-color: #999999;         border-bottom-color: #999999;         height: 170px;         overflow-y: scroll;         padding: 5px;         width: 100%;      }      #console p {         padding: 0;         margin: 0;      }   </style>   <script src="./sockjs-0.3.4.js"></script>   <script type="text/javascript">      var ws = null;      var url = null;      var transports = [];      function setConnected(connected) {         document.getElementById('connect').disabled = connected;         document.getElementById('disconnect').disabled = !connected;         document.getElementById('echo').disabled = !connected;      }      function connect() {         if (!url) {            alert('Select whether to use W3C WebSocket or SockJS');            return;         }         //ws = (url.indexOf('sockjs') != -1) ?new SockJS(url, undefined, {protocols_whitelist: transports}) : new WebSocket(url);         if ('WebSocket' in window) {            ws = new WebSocket("ws://localhost:8080/ws/websck");         }else {            ws = new SockJS("http://localhost:8080/ws/sockjs/websck/info");         }         //websocket = new SockJS("http://localhost:8084/SpringWebSocketPush/sockjs/websck");         ws.onopen = function () {            alert('open');            setConnected(true);            //log('Info: connection opened.');         };         ws.onmessage = function (event) {            alert('Received:' + event.data);            log('Received: ' + event.data);         };         ws.onclose = function (event) {            setConnected(false);            log('Info: connection closed.');            log(event);         };      }      function disconnect() {         if (ws != null) {            ws.close();            ws = null;         }         setConnected(false);      }      function echo() {         if (ws != null) {            var message = document.getElementById('message').value;            log('Sent: ' + message);            ws.send(message);         } else {            alert('connection not established, please connect.');         }      }      function updateUrl(urlPath) {         if (urlPath.indexOf('sockjs') != -1) {            url = urlPath;            document.getElementById('sockJsTransportSelect').style.visibility = 'visible';         }         else {            if (window.location.protocol == 'http:') {               url = 'ws://' + window.location.host + urlPath;            } else {               url = 'wss://' + window.location.host + urlPath;            }            document.getElementById('sockJsTransportSelect').style.visibility = 'hidden';         }      }      function updateTransport(transport) {         alert(transport);         transports = (transport == 'all') ?  [] : [transport];      }      function log(message) {         var console = document.getElementById('console');         var p = document.createElement('p');         p.style.wordWrap = 'break-word';         p.appendChild(document.createTextNode(message));         console.appendChild(p);         while (console.childNodes.length > 25) {            console.removeChild(console.firstChild);         }         console.scrollTop = console.scrollHeight;      }   </script></head><body><noscript><h2 style="color: #ff0000">Seems your browser doesn't support Javascript! Websockets   rely on Javascript being enabled. Please enable   Javascript and reload this page!</h2></noscript><div>   <div id="connect-container">      <input id="radio1" type="radio" name="group1" onclick="updateUrl('/websocket');">      <label for="radio1">W3C WebSocket</label>      <br>      <input id="radio2" type="radio" name="group1" onclick="updateUrl('/sockjs/websocket');">      <label for="radio2">SockJS</label>      <div id="sockJsTransportSelect" style="visibility:hidden;">         <span>SockJS transport:</span>         <select onchange="updateTransport(this.value)">            <option value="all">all</option>            <option value="websocket">websocket</option>            <option value="xhr-polling">xhr-polling</option>            <option value="jsonp-polling">jsonp-polling</option>            <option value="xhr-streaming">xhr-streaming</option>            <option value="iframe-eventsource">iframe-eventsource</option>            <option value="iframe-htmlfile">iframe-htmlfile</option>         </select>      </div>      <div>         <button id="connect" onclick="connect();">Connect</button>         <button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>      </div>      <div>         <textarea id="message" style="width: 350px">Here is a message!</textarea>      </div>      <div>         <button id="echo" onclick="echo();" disabled="disabled">Echo message</button>      </div>   </div>   <div id="console-container">      <div id="console"></div>   </div></div></body></html>

0 0
原创粉丝点击