一、websocket是什么?
相信绝大多数人都了解并运用过http协议,今天介绍的websocket与http协议类似,它也是网络通信协议的一种,而它与我们熟知的http协议的最大不同在于它是一种在单个 TCP 连接上进行全双工通讯的协议,能够实现服务器主动向客户端发起消息。今天主要介绍如何在SSM框架中集成websocket,实现服务器端与客户端的长连接以及服务器端消息的发送。
二、集成步骤(项目架构 SSM+Maven)
(1)引入websocket所需架包
pom.xml中加入以下依赖:
<!-- web socket 需要的 library --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${spring.version}</version> </dependency>
(2)配置webcocket握手拦截器
public class HandshakeInterceptor extends HttpSessionHandshakeInterceptor { @Override public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) { System.out.println("握手后"); super.afterHandshake(request, response, wsHandler, ex); } @Override public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception { System.out.println("Before Handshake"); if (request instanceof ServletServerHttpRequest) { ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request; HttpSession session = servletRequest.getServletRequest().getSession(false); if (session != null) { String username = (String) session.getAttribute(Constants.DEFAUL