WebSocket
WebSocket协议支持(在受控环境中运行不受信任的代码的)客户端与(选择加入该代码的通信的)远程主机之间进行全双工通信。用于此的安全模型是Web浏览器常用的基于原始的安全模式。 协议包括一个开放的握手以及随后的TCP层上的消息帧。
该技术的目标是为基于浏览器的、需要和服务器进行双向通信的(服务器不能依赖于打开多个HTTP连接(例如,使用XMLHttpRequest或<iframe>和长轮询))应用程序提供一种通信机制。
socket消息推送流程
-
后台创建socket服务;
-
用户登录后与后台建立socket连接,默认使用websocket,如果浏览器不支持则使用scokjs连接;
-
建立连接后,服务端可以向用户推送信息;
javaweb中,socket的实现方式有多种,这里使用Spring-webscoket的方式实现。
demo
搭建环境
在SpringMVC的项目基础上,导入websocket的相关jar包。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.1.9.RELEASE</version>
</dependency>
websocket服务端实现类
@Configuration
@EnableWebMvc
@EnableWebSocket
public class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer{
private static final Logger logger = LoggerFactory.getLogger(WebSocketConfig.class);
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
System.out.println("==========================注册socket");
//注册websocket server实现类,"/webSocketServer"访问websocket的地址
registry.addHandler(msgSocketHandle(),
"/webSocketServer").
addInterceptors(new WebSocketHandshakeInterceptor());
//使用socketjs的注册方法
registry.addHandler(msgSocketHandle(),
"/sockjs/webSocketServer").
addInterceptors(new WebSocketHandshakeInterceptor())
.withSockJS();
}
/**
*
* @return 消息发送的Bean
*/
@Bean(name = "msgSocketHandle")
public WebSocketHandler msgSocketHandle(){
return new MsgScoketHandle();
}
}

本文介绍了如何在SpringMVC项目中利用WebSocket进行实时消息推送。首先讲解了WebSocket协议及其在双向通信中的作用,然后详细阐述了socket消息推送的流程。接着通过一个demo展示了从搭建环境、配置拦截器、创建socket处理消息类到controller和前端页面的实现步骤。在实际操作中,还分享了解决SpringMVC项目中WebSocket连接404错误的解决办法,即调整DispatcherServlet配置并添加静态资源映射。
最低0.47元/天 解锁文章
499

被折叠的 条评论
为什么被折叠?



