这次给大家说一下自己对websocket + spring boot结合使用的一些经验
首先websocket是一个持久化的协议,实现了浏览器与服务器的全双工通信。不再像http那样,只有在浏览器发出request之后才有response,websocket能实现服务器主动向浏览器发出消息。
下面我们用spring boot来实现一下:
在spring boot的文档中,介绍了我们需要配置的文件
// pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
之后我们需要添加一个单例bean,名为ServerEndpointExporter
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter (){
return new ServerEndpointExporter();
}
}
接下来便能使用websocket了,下面是一个简单的例子:
@ServerEndpoint("/websocket")
@Component
public class MyWebSocket {
private static int onlineCount = 0;
private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<>();
private Session session;
@OnOpen
public void onOpen (Session session){
this.session = session;
webSocketSet.add(this);
addOnlineCount();
System.out.println("有新链接加入!当前在线人数为" + getOnlineCount());
}
@OnClose
public void onClose (){
webSocketSet.remove(this);
subOnlineCount();
System.out.println("有一链接关闭!当前在线人数为" + getOnlineCount());
}
@OnMessage
public void onMessage (String message, Session session) throws IOException {
System.out.println("来自客户端的消息:" + message);
// 群发消息
for ( MyWebSocket item : webSocketSet ){
item.sendMessage(message);
}
}
public void sendMessage (String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
public static synchronized int getOnlineCount (){
return MyWebSocket.onlineCount;
}
public static synchronized void addOnlineCount (){
MyWebSocket.onlineCount++;
}
public static synchronized void subOnlineCount (){
MyWebSocket.onlineCount--;
}
}
代码很简单,相信大家都能看懂,接下来贴一下html代码:
<!DOCTYPE HTML>
<html>
<head>
<base href="localhost://localhost:8080/">
<title>My WebSocket</title>
</head>
<body>
Welcome<br/>
<input id="text" type="text"/>
<button onclick="send()">Send</button>
<button onclick="closeWebSocket()">Close</button>
<div id="message">
</div>
</body>
<script type="text/javascript">
var websocket = null;
//判断当前浏览器是否支持WebSocket
if ('WebSocket' in window) {
websocket = new WebSocket("ws://localhost:8080/websocket");
}
else {
alert('Not support websocket')
}
//连接发生错误的回调方法
websocket.onerror = function () {
setMessageInnerHTML("error");
};
//连接成功建立的回调方法
websocket.onopen = function (event) {
setMessageInnerHTML("open");
}
//接收到消息的回调方法
websocket.onmessage = function (event) {
setMessageInnerHTML(event.data);
}
//连接关闭的回调方法
websocket.onclose = function () {
setMessageInnerHTML("close");
}
//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。
window.onbeforeunload = function () {
websocket.close();
}
//将消息显示在网页上
function setMessageInnerHTML(innerHTML) {
document.getElementById('message').innerHTML += innerHTML + '<br/>';
}
//关闭连接
function closeWebSocket() {
websocket.close();
}
//发送消息
function send() {
var message = document.getElementById('text').value;
websocket.send(message);
}
</script>
</html>
接下来便能直接启动websocket进行访问了,具体的扩展可以根据你的业务需求进行增加。
其实websocket就是基于http协议的升级,在http的headers中有一个header名为Upgrade,用来对http协议进行升级,从而换用其他的协议,在本例中,为Upgrade:websocket
分享到:
相关推荐
在本文中,我们将深入探讨如何在Spring Boot框架中集成WebSocket技术,以便实现实时通信功能。结合jQuery在前端的应用,可以构建出一个高效、实时的Web应用。首先,让我们了解Spring Boot和WebSocket的基本概念。 ...
一个基于Spring Boot + WebSocket + Redis,可快速开发的分布式即时通讯群聊系统。适用于直播间聊天、游戏内聊天、客服聊天等临时性群聊场景。 Java开发基于SpringBoot+WebSocket+Redis分布式即时通讯群聊系统。一...
为了确保安全性,WebSocket通信需要进行身份认证。通常是在WebSocket连接建立之前,使用HTTP的`Authorization`头部进行身份认证。认证成功后,服务器端生成一个令牌(token),例如JWT(JSON Web Token),返回给...
总结起来,这个简单的Spring Boot+WebSocket demo展示了如何利用Spring Boot框架创建WebSocket服务,以及如何使用JavaScript客户端进行连接和通信。通过这个示例,开发者可以进一步了解WebSocket在实时应用中的作用...
如何使用Postman来发送数据到后端Spring Boot应用程序,并使用WebSocket建立实时通信通道,以便后端应用程序可以向Postman推送消息。 学会这个方法,就能缩短你的项目开发周期,以及提高你的开发效率。如果提出您的...
STOMP是一种简单易用的二进制协议,常用于WebSocket通信。 接着,我们需要实现`WebSocketMessageBrokerConfigurer`接口,配置WebSocket端点和STOMP消息代理。在`configureMessageBroker()`方法中,我们可以设置消息...
3. **Netty作为WebSocket后台服务器**:虽然Spring Boot内置了Tomcat或Undertow这样的嵌入式服务器,但它们可能并不适合高并发的实时通信场景。这时,我们可以使用Netty作为WebSocket的后台服务器,利用其高效的非...
在测试方面,由于WebSocket是基于TCP的,所以普通的HTTP测试工具可能无法很好地模拟WebSocket通信。这里我们可以使用一些专门的WebSocket测试工具,如`ws`命令行工具,或者在代码中使用`WebSocketClient`进行测试。 ...
基于Vue+SpringBoot+WebSocket实现Web端聊天系统+网络通信+心跳+客户端服务端+后端java+mysql 项目经过严格测试,确保可以运行! 下载代码后,先配置好yml文件:数据库和微信号appid、secret(other包下面有数据库)...
在本文中,我们将深入探讨如何使用Spring Boot和WebSocket技术构建一个简易的聊天室。Spring Boot是Java领域中广泛使用的框架,它简化了Spring应用程序的初始设置和配置。WebSocket则是一种在客户端和服务器之间建立...
Spring Boot简化了Java Web开发,提供了快速构建独立应用程序的方式,而WebSocket则是一种在客户端和服务器之间建立长连接的协议,可以实现双向通信,非常适合于实时数据更新的需求,如进度条显示。 首先,我们需要...
websocket 【项目资源】:包含前端、后端、移动开发、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源,毕业设计等各种技术项目的源码。包括C++、Java、python、web、C#、EDA等项目的源码。 ...
接下来,我们将深入探讨如何利用Spring Boot、RabbitMQ和WebSocket来实现一个简单的消息推送聊天应用。 首先,让我们了解Spring Boot如何集成RabbitMQ。在Spring Boot项目中引入`spring-boot-starter-amqp`依赖,它...
它提供了一套强大的事件处理机制,使得开发者可以轻松地处理TCP、UDP和HTTP协议,包括WebSocket通信。Netty底层基于NIO(非阻塞I/O)模型,提高了网络通信的性能。 ### 3. WebSocket - 实时消息传输 WebSocket是一...
Spring Boot整合websocket实现群聊,音频发送,点对点聊天,图片发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送。 Spring Boot整合websocket实现群聊,点对点聊天,图片发送,音频发送 ...
这通常需要自定义Servlet和Filter来桥接Spring和Netty的WebSocket通信。 6. **测试与调试**:可以使用WebSocket测试工具(如Chrome的WebSocket面板,或是Postman的WebSocket扩展)来模拟客户端行为,测试WebSocket...
WebSocket是Web应用中一种实时通信(Real-Time Communication, RTC)技术,它允许服务器与客户端之间进行双向通信,而不仅仅是传统的HTTP请求-响应模式。Spring Boot是基于Java的微服务框架,它简化了创建独立的、...
在Spring Boot应用中整合ActiveMQ和WebSocket,可以创建一个实时通信系统,使后端服务能够高效地推送消息到前端客户端。以下将详细解释这个过程的关键知识点: 1. **ActiveMQ**:Apache ActiveMQ是一个开源的消息...
WebSocket则是一种在客户端和服务器之间建立长连接的协议,它允许双方进行双向通信,即服务器可以主动向客户端推送数据,而不仅仅是响应客户端的请求。WebSocket协议解决了HTTP协议的局限性,提高了实时性,广泛应用...
总的来说,这个项目是一个利用Spring Boot框架,结合多连接池技术来优化数据库访问,同时采用WebSocket实现实时通信的示例。开发者可以通过CSDN上的博文获取更详细的技术讲解,或者直接联系提供的QQ号获取帮助。这样...