学习背景
很久以前就知道WebSocket,但那时不论是浏览器还是开发技术对它的支持都还很少。但是,Spring4突然发布,让我眼前一亮,Spring4直接支持WebSocket。
对于Spring我还是很喜欢的,它让Java Web开发相当的有艺术感,这次支持的WebSocket又特别的和我的胃口,所以马上就去学习了。
前提
本文的内容,是建立在懂J2EE编程,使用过Spring,听说过WebSocket上的,如果前面的3点大家不太明白,可以先去补补知识。
WebSocket还不是很普遍,对服务器和浏览器都有要求,不过使用了下面的一些技术,可以将浏览器的要求降低,但是服务器容器的要求还是比较高的,具体哪些服务器容易支持了WebSocket可以百度一下。
第一步:配置Spring
如果你跟我一样采用的Maven,那么只需要将下面的几个依赖,加入到pom.xml文件就可以了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
<properties> <spring.version> 4.0 . 0 .RELEASE</spring.version>
</properties> <dependencies> <!--spring MVC-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- jstl -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version> 1.2 </version>
</dependency>
<!--spring测试框架-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency>
<!--spring数据库操作库-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version> 4.8 . 2 </version>
<scope>test</scope>
</dependency>
<!--spring websocket库-->
<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>
<!--jackson用于json操作-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version> 2.3 . 0 </version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version> 1.2 . 2 </version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version> 2.2 </version>
</dependency>
<!--使用阿里的连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version> 1.0 . 4 </version>
</dependency>
<!--mysql connector-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version> 5.1 . 29 </version>
</dependency>
</dependencies> |
第二步:配置WebSocket
我采用的是使用Configurer类和 Annotation来进行WebSocket配置。
首先要创建一个类,继承WebSocketMessageBrokerConfigurer,并且在类上加上annotation:@Configuration和@EnableWebSocketMessageBroker。这样,Spring就会将这个类当做配置类,并且打开WebSocket。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig implements WebSocketMessageBrokerConfigurer{
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
//添加这个Endpoint,这样在网页中就可以通过websocket连接上服务了
registry.addEndpoint( "/coordination" ).withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
System.out.println( "服务器启动成功" );
//这里设置的simple broker是指可以订阅的地址,也就是服务器可以发送的地址
/**
* userChat 用于用户聊天
*/
config.enableSimpleBroker( "/userChat" );
config.setApplicationDestinationPrefixes( "/app" );
}
@Override
public void configureClientInboundChannel(ChannelRegistration channelRegistration) {
}
@Override
public void configureClientOutboundChannel(ChannelRegistration channelRegistration) {
}
} |
第一个方法,是registerStompEndpoints,大意就是注册消息连接点(我自己的理解),所以我们进行了连接点的注册:
1
|
registry.addEndpoint( "/coordination" ).withSockJS();
|
第二个方法,configureMessageBroker,大意是设置消息代理,也就是页面上用js来订阅的地址,也是我们服务器往WebSocket端接收js端发送消息的地址。
1
2
|
config.enableSimpleBroker( "/userChat" );
config.setApplicationDestinationPrefixes( "/app" );
|
说了这么多地址,估计大家都绕晕了,因为项目的整个雏形还没有出来,所以很混乱。所以接下来就配置js端。
第三步:配置Browser端
说了这么多地址,估计大家都绕晕了,因为项目的整个雏形还没有出来,所以很混乱。所以接下来就配置js端。
首先我们要使用两个js库,一个是之前说过的SockJs,一个是stomp,这是一种通信协议,暂时不介绍它,只需要知道是一种更方便更安全的发送消息的库就行了。
需要连接服务端的WebSocket:
1
2
3
|
var socket = new SockJS( '/coordination' );
var stompClient = Stomp.over(socket); stompClient.connect( '' , '' , function (frame) {});
|
没错,就只需要两句话。有了这三句话,我们就已经可以连接上了服务器。
使用SockJs还有一个好处,那就是对浏览器进行兼容,如果是IE11以下等对WebSocket支持不好的浏览器,SockJs会自动的将WebSocket降级到轮询(这个不知道的可以去百度一下),之前也说了,Spring对SockJs也进行了支持,也就是说,如果之前加了withSockJs那句代码,那么服务器也会自动的降级为轮询。(怎么样,是不是很兴奋,Spring这个特性太让人舒服了)
但是连接上了服务器,却没有进行任何的操作,所以下一步,我们要在服务器端撰写响应和数据处理代码,在Browser端撰写消息发送和接收代码。当然,这是下一篇的内容了。
结语
这个项目整体是一个在线协同备课系统,其中包含了聊天这个小功能,所以使用它来讲解一下Spring WebSocket的使用。
我将代码放到了 github上 ,有兴趣的朋友可以去看看代码,因为涉及到了很多协同操作,所以代码比较复杂,如果仅仅想了解Spring WebSocket的朋友,还是等我的下一篇文章吧。
github地址:https://github.com/xjyaikj/OnlinePreparation
http://blog.weiqinxue.cn/blogs/index.php/User/articleview/ArticleID/U2A99
相关推荐
**Spring Websocket与SockJS详解** 在现代Web开发中,实时通信已经成为不可或缺的一部分,而Spring Websocket和SockJS就是实现这一目标的重要工具。Spring Websocket是Spring Framework的一部分,它为WebSocket应用...
《Spring WebSocket 中文注释案例详解》 在现代Web开发中,实时通信功能变得越来越重要,Spring框架提供了WebSocket支持,使得服务器与客户端可以进行双向通信,实现高效、低延迟的数据交换。本文将深入探讨一个...
**Spring WebSocket 入门示例详解** WebSocket 是一种在单个TCP连接上进行全双工通信的协议,它为浏览器和服务器之间的实时通信提供了高效、低延迟的解决方案。Spring 框架通过其 WebSocket 模块,使得在Java后端...
《Spring整合WebSocket实现实时通讯详解》 WebSocket协议的出现,为Web应用提供了全双工、低延迟的通信方式,使得服务器能够主动向客户端推送数据,极大地丰富了Web应用的交互体验。Spring框架作为Java领域中极为...
### Websocket与Spring框架整合详解 #### 一、WebSocket简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。它提供了双向通道通信,允许服务器和客户端之间的数据被实时推送,这使得WebSocket成为构建实时...
4. **WebSocketClient**: 在客户端,我们可以使用JavaScript的WebSocket API或者使用基于Stomp的库(如SockJS)来建立连接并发送/接收消息。 接下来,我们来一步步构建一个简单的WebSocket应用: **1. 配置...
STOMP是WebSocket上的一种轻量级的消息协议,易于理解和实现,可以和Spring的`MessageBroker`一起使用。 总结来说,Spring WebSocket提供了一套完整的解决方案,从配置到业务处理,帮助开发者轻松地将WebSocket集成...
### Spring4 API 相关知识点 #### 一、Spring Framework 概览 1. **Spring框架简介** - Spring框架是一个开源的Java平台,旨在简化企业级应用开发。 - 它提供了一种全面的方式来配置和管理应用程序组件,支持...
Spring Boot,作为一个流行的Java开发框架,通过其丰富的生态,支持WebSocket的集成和使用。本篇文章将深入探讨如何使用Spring Boot来实现WebSocket的发送和接收消息功能。 首先,我们需要在Spring Boot项目中添加...
在Spring Boot框架中使用WebSocket实现消息推送,是一种常见的实时通信技术,允许服务器主动向客户端推送数据。WebSocket协议提供了全双工的通信渠道,相较于传统的HTTP请求-响应模式,它能显著减少延迟并提高效率。...
《基于Java Spring+Struts2实现WebSocket聊天服务详解》 WebSocket技术在现代Web应用中扮演着重要的角色,它提供了一种双向通信机制,使得服务器和客户端可以实时交换数据,极大地提升了用户体验。本教程将深入探讨...
### Spring Framework 4.3.1.BUILD-SNAPSHOT 关键知识点详解 #### 一、Spring框架概述 **1.1 获取Spring框架的起点** 在《Spring Framework Reference Documentation》4.3.1.BUILD-SNAPSHOT 版本中,首先介绍了...
- WebSocket支持:增强了WebSocket API,支持SockJS协议,提供了更好的实时通信能力。 - 数据访问:对JPA、JDBC、MongoDB等数据库访问进行了优化和扩展。 - 与其他技术的集成:与Spring Boot 2.x、Spring Security、...
文档详细介绍了Spring的各个模块、API及使用方法,对于学习和解决问题非常有帮助。 3. `spring-framework-5.0.17.RELEASE-schema.zip`:包含Spring的XML配置文件的XSD schema,有助于开发者编写正确的XML配置,确保...
### Spring Framework核心知识点详解 #### 一、Spring框架概述 **Spring Framework** 是一个开源的Java平台,旨在简化企业级应用程序开发。它提供了一个全面的编程模型,支持从Web到数据访问的应用程序开发。该...
《基于Vue CLI与SpringCloud的微服务移动Web聊天室实现详解》 在现代互联网开发中,前后端分离已经成为一种常见的架构模式,它提高了系统的可维护性和扩展性。本项目"springboot-hichat-master.zip"就是一个典型的...