编译环境:jdk1.8 , tomcat8.0+ , IDEA
这里主要讲一下websocket的信息传递,以如何实现多人实时在线聊天为例:
websocket主要的三个类
MyWebSocketConfig主要负责配置websocket的处理器和握手拦截器
MyHandShakeInterceptor 是websocket的拦截器
MyWebSocketHander是websocket的处理器
@Component
@EnableWebSocket
public class MyWebSocketConfig implements WebSocketConfigurer {
@Autowired
private MyWebSocketHander myWebSocketHander;
private static final String LINK_URI = "websocket.do";
//添加websocket处理器,添加握手拦截器 拦截器先执行 然后到处理器
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry.addHandler(myWebSocketHander,LINK_URI).addInterceptors(new MyHandShakeInterceptor());
}
}
/* private static Map<WebSocketSession,String> map = new HashMap<WebSocketSession, String>();
* websocket握手拦截器
* 拦截握手前,握手后的两个切面
*/
@Component
public class MyHandShakeInterceptor implements HandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Map<String, Object> map) throws Exception {
if(serverHttpRequest instanceof ServletServerHttpRequest){
HttpServletRequest servletRequest = ((ServletServerHttpRequest)serverHttpRequest).getServletRequest();
User user = (User)servletRequest.getSession().getAttribute("user");
//这里给map赋值 相当于websockethandler的afterConnectionEstablished方法里的WebSocketSession
//key是session,value是变量
map.put("ws_user", user);
}
return true;
}
@Override
public void afterHandshake(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse, WebSocketHandler webSocketHandler, Exception e) {
}
}
实时通信的具体流程:
前端