Spring WebSocket 支持
通常应用程序之间交换信息会使用如 JMS、AMQP 等技术,但是它们都无法实现浏览器客户端和服务器之间的全双工通信,基于 HTML5 的 WebSocket 协议可以用于实现浏览器和服务器之间的全双工通信;
相对于传统的服务器轮询方式,WebSocket 可以为长连接的建立一个低延迟、全双工、跨域的通信通道,这样的方式更加高效便捷,很适合需要实时通信的场景;
目前浏览器对于 WebSocket 的支持情况如下:
- IE:10.0(完整支持);
- FireFox:4.0(部分支持),6.0(完整支持);
- Chrome:4.0(部分支持),13.0(完整支持);
- Opera:11.0(部分支持),12.10(完整支持);
- Safari:5.0(部分支持),12.10(完整支持);
- IOS Safari:4.2(部分支持),6.0(完整支持);
- Android Browser:4.4(完整支持);
目前部分服务端对于 WebSocket 的支持情况如下:
- JavaEE 7.0+
- Tomcat 8.0+
- Jetty 7.0+
WebSocket 通信的 URL 是以 “ws://” 或 “wss://” 开头的,分别对应 “http://”,“https://”;
Spring 从 4.0 开始全面支持 WebSocket ,该支持包括以下几个方面:
- 发送和接收信息的 API;
- 用于发送信息的模板;
- 支持 SockJS(用于解决浏览器、服务器及代理不支持 WebSocket 的问题);
在 Spring 中使用 WebSocket 需要导入以下依赖包:
org.springframework:spring-web
org.springframework:spring-webmvc
org.springframework:spring-websocket
以下完整示例代码地址:
Spring MVC WebSocket 程序的实现
Spring MVC 提供了 WebSocketHandler 用于支持 WebSocket 的收发信息API,同时提供一个实现类AbstractWebSocketHandler ,可以继承该类方便地实现一个 WebSocket 服务端控制器,该接口常用地方法如下:
handleTextMessage | 处理接收的文本类型消息 |
handleBinaryMessage | 处理接收的二进制类型消息 |
handlePongMessage | 处理接收的Pong类型的消息 |
handleTransportError | 处理接收Exception信息 |
afterConnectionEstablished | 在建立 Websocket 连接后的执行方法 |
afterConnectionClosed | 在关闭 Websocket 连接后的执行方法 |
示例代码模块(代码地址见上面):
site.assad.web.HelloWebScoketHandler(websocket服务端控制器)
resources/applicationContext.xml(配置文件)
webapp/hello.jsp(websocket客户端)
一个示例的服务端控制器 HelloWebSocketHandler 如下:
package site.assad.web;
public class HelloWebSocketHandler extends AbstractWebSocketHandler {
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
//处理文本消息
System.out.println("get message: " + message.getPayload());
//模拟延时
Thread.sleep(2000);
//发送信息
System.out.println("send message: Hello world!");
session.sendMessage(new TextMessage("from server: Hello world!"));
}
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("websocket connected");
}
public void afterConnectionClosed(WebSocketSession session, CloseStatus