spring整合websocket

前提: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{
	@Override
	public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
			WebSocketHandler handler, Exception exception) {
		
	}
	
	@Override
	public 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
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer{
	
	@Autowired
	private BusSocketHandler busSocketHandler;
	@Autowired
	private CountrySocketHandler countrySocketHandler;

	@Override
	public 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;


@Service
public class BusSocketHandler implements WebSocketHandler{
	@Override
	public void afterConnectionEstablished(WebSocketSession session)
			throws Exception {
		this.sendMessageToBus(session);
	}

	@Override
	public void handleMessage(WebSocketSession arg0, WebSocketMessage<?> arg1)
			throws Exception {
		
	}

	@Override
	public void handleTransportError(WebSocketSession session, Throwable error)
			throws Exception {
		if(session.isOpen()){
			session.close();
		}
	}
	
	@Override
	public void afterConnectionClosed(WebSocketSession session, CloseStatus arg1)
			throws Exception {
	}

	@Override
	public 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++;
			}
		}
	}
}
	

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值