spring整合websocket

来源:互联网 发布:php招聘要求不靠谱 编辑:程序博客网 时间:2024/05/31 00:40

前提:SSM+maven



jsp

<%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";String wsPath = "ws://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><script src="sockjs.min.js"></script>$(document).ready(function() {        //建立socket连接var sock;if ('WebSocket' in window) {sock = new WebSocket("<%=wsPath%>socketServer");    } else if ('MozWebSocket' in window) {    sock = new MozWebSocket("<%=wsPath%>socketServer");    } else {    sock = new SockJS("<%=basePath%>sockjs/socketServer");    }sock.onopen = function (e) {console.log(e);    };    sock.onmessage = function (e) {    console.log(e);    //var bToObj=JSON.parse(e.data)                  alert(e.data)           };    sock.onerror = function (e) {    console.log(e);    };    sock.onclose = function (e) {    console.log(e);    }});}

POM依赖

        <dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.1.0</version></dependency><dependency>   <groupId>org.springframework</groupId>   <artifactId>spring-websocket</artifactId>   <version>4.0.1.RELEASE</version></dependency><dependency>   <groupId>org.springframework</groupId>   <artifactId>spring-messaging</artifactId>   <version>4.0.1.RELEASE</version></dependency>


WebSocketInterceptor

import java.util.Map;import org.springframework.http.server.ServerHttpRequest;import org.springframework.http.server.ServerHttpResponse;import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.server.HandshakeInterceptor;public class WebSocketInterceptor implements HandshakeInterceptor{@Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,WebSocketHandler handler, Exception exception) {}@Overridepublic boolean beforeHandshake(ServerHttpRequest request,ServerHttpResponse response, WebSocketHandler handler,Map<String, Object> map) throws Exception {if(request instanceof ServerHttpRequest){}return true;}}

WebSocketConfig

import org.springframework.beans.factory.annotation.Autowired;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.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{@Autowiredprivate BusSocketHandler busSocketHandler;@Autowiredprivate CountrySocketHandler countrySocketHandler;@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {//注册处理拦截器,拦截url为socketServer的请求registry.addHandler(busSocketHandler, "/socketServer").addInterceptors(new WebSocketInterceptor());//注册SockJs的处理拦截器,拦截url为/sockjs/socketServer的请求registry.addHandler(busSocketHandler, "/sockjs/socketServer").addInterceptors(new WebSocketInterceptor()).withSockJS();//注册处理拦截器,拦截url为socketServer的请求registry.addHandler(countrySocketHandler, "/countrySocketServer").addInterceptors(new WebSocketInterceptor());//注册SockJs的处理拦截器,拦截url为/sockjs/socketServer的请求registry.addHandler(countrySocketHandler, "/sockjs/countrySocketServer").addInterceptors(new WebSocketInterceptor()).withSockJS();}}


BusSocketHandler

import java.util.HashMap;import java.util.Map;import org.springframework.stereotype.Service;import org.springframework.web.socket.CloseStatus;import org.springframework.web.socket.TextMessage;import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.WebSocketMessage;import org.springframework.web.socket.WebSocketSession;import com.alibaba.fastjson.JSONObject;@Servicepublic class BusSocketHandler implements WebSocketHandler{@Overridepublic void afterConnectionEstablished(WebSocketSession session)throws Exception {this.sendMessageToBus(session);}@Overridepublic void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1)throws Exception {}@Overridepublic void handleTransportError(WebSocketSession session, Throwable error)throws Exception {if(session.isOpen()){session.close();}}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)throws Exception {}@Overridepublic boolean supportsPartialMessages() {return false;}public void sendMessageToBus(WebSocketSession session) throws Exception {if (session.isOpen()) {Map<String, String> map = new HashMap<String,String>();int i = 1;while (session.isOpen()) {String a = "a====="+i;map.put("a", a);String jsonString = JSONObject.toJSONString(map);try {session.sendMessage(new TextMessage(jsonString));} catch (Exception e) {break;}Thread.sleep(1000);i++;}}}}



原创粉丝点击