- spring 4.0及以上增加了WebSocket的支持(这里使用4.2.5.RELEASE)。
- spring 支持STOMP协议的WebSocket通信。
应对不支持 WebSocket 的场景,许多浏览器不支持 WebSocket 协议;SockJS 是 WebSocket 技术的一种模拟。SockJS 会 尽可能对应 WebSocket API,但如果 WebSocket 技术 不可用的话,会从如下 方案中挑选最优可行方案:
1
2
3
4
5
6
7
8XHR streaming
XDR streaming
iFrame event source
iFrame HTML file
XHR polling
XDR polling
iFrame XHR polling
JSONP pollingWebSocket 是发送和接收消息的 底层API,而SockJS 是在 WebSocket 之上的 API;最后 STOMP(面向消息的简单文本协议)是基于 SockJS 的高级API。
- SockJS 所处理的URL 是 “http:” 或 “https:” 模式
- WebSocket 所处理的URL 是“ws:” or “wss:” 模式
下面我们来建立一个websocket实例
1、创建web工程
首先搭建一个简单可访问的web系统,这里提供一个我自己搭建的SSM框架供使用。
2、导入spring-websocket需要的jar
1 | <dependency> |
3、创建Websocket处理器
可以扩展 AbstractWebSocketHandler ,也可以扩展TextWebSocketHandler(文本处理器),TextWebSocketHandler 继承 AbstractWebSocketHandler
TestWebsocketHandler
1 | package com.websocket; |
4、创建WebSocket握手拦截器
TestHandshakeInterceptor
1 | package com.websocket; |
5、创建Websocket配置文件
采用注解的方式。
WebSocketConfig
1 | package com.websocket; |
6、创建Controller,控制页面跳转
WebsocketController
1 | package com.websocket; |
7、测试页面
登录页面,index.jsp
1 | <%@ page language="java" contentType="text/html; charset=utf-8" |
消息发送接收页面 websocket.jsp
1 | <%@ page language="java" contentType="text/html; charset=utf-8" |
注意事项
- 因为是基于Spring注解,所以要将以上websocket的三个文件添加到Spring的扫描路径中。
- 建议所有的servlet和filter都要加
<async-supported>true</async-supported>
,支持异步处理。