浅测SpringBoot环境中使用WebSocket(多端实时通信)

这篇具有很好参考价值的文章主要介绍了浅测SpringBoot环境中使用WebSocket(多端实时通信)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

概述

测试:前端代码

后端代码(SpringBoot环境)

 1.创建处理器类(用于处理连接和消息)

2.创建配置类(用于注册处理器类,开启WebSocket)

连接测试


概述

 这篇博客主要是记录测试使用WebSocket的过程。

需求说明:最近在做一个预约系统,有用户端和医生端,用户端展示着自己的预约信息和其他用户的预约信息,医生端展示着所有人的预约信息和操作按钮,医生端是可以进行预约的处理,例如"接诊","完成"和"错过时间"等处理操作,当医生进行这类操作以后,需要通知到所有用户端进行数据更新,以展示最新的预约状态。

总结:医生端操作,服务器广播消息给所有连接的用户端,用户端接收到消息进行数据的重新获取,进行数据实时更新。

需求分析:根据需求,我们只要做到医生端建立连接并向服务器发送指定内容,服务器接收到指定内容后,向所有已连接上的客户端发送更新指令(广播),客户端接收到后进行数据的重新获取展示,就能达到根据医生操作数据实时更新数据的效果。

实现

1.定时轮询:为了达到如上需求,我们可以进行定时轮询,也就是定时向服务器获取最新的数据,这是种简单的实现思路,但是耗性能并且实时更新的效率也不高。

2.WebSocket:使用WebSocket的话就好了许多,只需要用户端向服务器进行一次连接,那么就能进行多次通信,并且通信可以是双向的。如下使用此方式实现演示。

测试:前端代码

前端代码创建WebSocket对象,连接并发送消息。

简单测试界面:

浅测SpringBoot环境中使用WebSocket(多端实时通信),websocket,网络协议,网络,spring boot

 前端代码(原生JS实现)

<div id="container">
	<h2>WebSocketTest</h2><br>
	内容<input type="text" id="myInput"><br><br>
	<button id="linkServer">连接并发送消息</button>
</div>

<script>
	// 获取输入框内容-发送的消息
	let myInput =  document.querySelector("#myInput")
	// 发送按钮,触发连接并发送消息。
	document.querySelector("#linkServer").onclick = function(){
		// 触发下方方法
		connect(myInput.value);
	}
	
	// 创建WebSocket对象并发送消息,接收消息。
	function connect(sendMsg){
		// 创建WebSocket对象
        // ws://localhost:8787/myWebSocket为后端开放的访问路径
		const socket = new WebSocket('ws://localhost:8787/myWebSocket');
		// 监听连接打开事件
		socket.onopen = function(event) {
		  console.log('WebSocket连接已打开');
		  
		  // 发送消息
		  socket.send(sendMsg);
		  console.log("客户端发送的消息是:",sendMsg);
		};
		
		// 监听接收消息事件
		socket.onmessage = function(event) {
		  console.log('接收到消息:', event.data);
		};
		
		// 监听连接关闭事件
		socket.onclose = function(event) {
		  console.log('WebSocket连接已关闭');
		};
		
		// 监听连接错误事件
		socket.onerror = function(event) {
		  console.error('WebSocket连接发生错误');
		};
	}
</script>

后端代码(SpringBoot环境)

导入依赖(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
    <version>2.7.5</version>
</dependency>

 1.创建处理器类(用于处理连接和消息)

package com.mh.common;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.*;

import java.util.ArrayList;
import java.util.List;

/**
 * Date:2023/4/20
 * author:zmh
 * description: WebSocket消息处理类
 **/

@Component
public class MyWebSocketHandler implements WebSocketHandler {

    // 维护所有连接会话的列表
    private List<WebSocketSession> sessions = new ArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // 将新连接的Session加入到集合中
        this.sessions.add(session);
    }

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        // 获取前端传入的消息
        String payload = (String) message.getPayload();
        // 根据传入消息不同,响应不同消息
        if ("student".equals(payload)){
            session.sendMessage(new TextMessage("student,hi!"));
        } else if ("doctor".equals(payload)) {
            session.sendMessage(new TextMessage("doctor,hi!"));
        } else if ("maohe101".equals(payload)) {
            // 广播前将此临时通知连接删除,因为我们每次发送广播通知前端都会新创建一个连接。
            session.close();
            // 将消息广播到所有已连接的会话上
            for (WebSocketSession s : this.sessions) {
                s.sendMessage(new TextMessage("预约信息已变更,请重载数据!"));
            }

        }else {
            session.sendMessage(new TextMessage("你好!"));
        }

    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        // 处理错误的连接,将连接删除
        this.sessions.remove(session);
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        // 处理主动关闭的连接
        this.sessions.remove(session);
    }

    @Override
    public boolean supportsPartialMessages() {
        // 关闭部分消息的处理,等待所有消息到达后在做处理
        return false;
    }
}

2.创建配置类(用于注册处理器类,开启WebSocket)

package com.mh.config;

import com.mh.common.MyWebSocketHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

/**
 * Date:2023/4/20
 * author:zmh
 * description: WebSocket配置类
 **/

@Configuration 
@EnableWebSocket // 开启WebSocket
public class MyWebSocketConfig implements WebSocketConfigurer {
    
    // 注入自定义的处理器类
    @Autowired
    private MyWebSocketHandler myWebSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // 注册自定义处理器类,指定访问入口,并指定所有源均可连接WebSocket
        registry.addHandler(myWebSocketHandler,"/myWebSocket").setAllowedOrigins("*");
    }
}

连接测试

 根据后端代码,当服务器接收到前端发送的消息:"maohe101"之后,就会广播指定消息:”预约信息已变更,请重载数据!“,那么客户端接收到此广播的消息,就进行数据的重新拉取,实现数据的实时更新。这也就解决了我们的需求,当医生端操作后,就向服务器发送"maohe101"那么就能实现通知所有客户端更新数据的需求了。

模拟客户端连接

浅测SpringBoot环境中使用WebSocket(多端实时通信),websocket,网络协议,网络,spring boot

模拟医生端连接

浅测SpringBoot环境中使用WebSocket(多端实时通信),websocket,网络协议,网络,spring boot

医生端发送更新指令(触发广播消息)

浅测SpringBoot环境中使用WebSocket(多端实时通信),websocket,网络协议,网络,spring boot

----------------

浅测SpringBoot环境中使用WebSocket(多端实时通信),websocket,网络协议,网络,spring boot

===> 至此,测试完毕。<===文章来源地址https://www.toymoban.com/news/detail-700784.html

到了这里,关于浅测SpringBoot环境中使用WebSocket(多端实时通信)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 进度变动实时通知-使用SocketIO实现前后端的通信(基于WebSocket的实时通信库)

    最近在接触的一个项目,将PDF上传到项目里,通过调用OCR云服务把PDF里的表格数据识别出来。在此过程中,前后端需要实时通信,对识别数据进行“进度跟踪”。因此我们采用SocketIO的通讯方式,识别中前端和后端服务建立SocketIO连接,根据事件进行数据的实时更新百分比进度

    2024年02月06日
    浏览(52)
  • 使用Spring WebSocket实现实时通信功能

    🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页 ——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐 🌊 《100天精通Golang(基础

    2024年02月09日
    浏览(37)
  • 集成websocket实现实时通信(ruoyi 使用笔记)

    Websocket 是一种基于 TCP 协议的全双工通信协议,它使得客户端和服务器之间可以进行实时的双向通信。相对于传统的 HTTP 协议只能通过客户端发送请求,然后等待服务端的响应,WebSocket 可以让客户端和服务器在任何时候都可以相互发送消息,这种实时通信的方式非常适合需要

    2024年02月07日
    浏览(44)
  • Spring Boot进阶(49):实时通信不再是梦想,SpringBoot+WebSocket助你轻松实现前后端即时通讯!

            在上一期,我对WebSocket进行了基础及理论知识普及学习,WebSocket是一种基于TCP协议实现的全双工通信协议,使用它可以实现实时通信,不必担心HTTP协议的短连接问题。Spring Boot作为一款微服务框架,也提供了轻量级的WebSocket集成支持,本文将介绍如何在Spring Boot项

    2024年02月11日
    浏览(50)
  • 使用React 18和WebSocket构建实时通信功能

    WebSocket 是一种在 Web 应用中实现双向通信的协议。它允许服务器主动向客户端推送数据,而不需要客户端发起请求。在现代的实时应用中, WebSocket 经常用于实时数据传输、聊天功能、实时通知和多人协作等场景。在本篇博客中,我们将探索如何在 React 18 应用中使用 WebSocke

    2024年02月05日
    浏览(41)
  • 如何在Node.js中使用WebSocket实现实时通信

    在Web应用程序中,实时通信已经成为一种必不可少的功能。WebSocket是一种基于TCP的协议,它提供了双向通信的能力,使得实时通信变得更加容易。Node.js提供了一个内置的WebSocket模块,使得开发实时通信应用程序变得非常简单。在本文中,我将介绍如何在Node.js中使用WebSocket实

    2024年02月14日
    浏览(48)
  • ASP.NET Core 中使用 WebSocket 协议进行实时通信

    介绍 在 ASP.NET Core 中使用 WebSocket 协议创建实时通信的完整示例涉及几个步骤。在此示例中,我们将创建一个简单的聊天应用程序,用户可以在其中实时发送和接收消息。此示例假设您对 ASP.NET Core 和 C# 有基本了解。 步骤1.创建一个新的ASP.NET Core项目 首先,使用 Visual Studio 或

    2024年01月25日
    浏览(51)
  • websocket实时通讯和socket.io实时通信库的使用;心跳机制与断线重连

    https://zh.javascript.info/websocket WebSocket 是一种网络通信协议,就类似于 HTTP 也是一种通信协议。 为什么需要 WebSocket? 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 代码解析: 创建WebSocket实例:通过 new WebSocket() 创建一个WebSocket实例。在括号中传入服务器的URL,该URL指定了

    2024年02月16日
    浏览(42)
  • 如何使用websocket+node.js实现pc后台与小程序端实时通信

    实现功能:实现pc后台与小程序端互发通信能够实时检测到 1.安装ws依赖 2.创建index.js 3.打开终端,启动服务 这里是手动点击连接按钮,发起的websocket连接,可自行更改到其他合适的地方连接websocket 1.创建两个按钮,连接按钮,发送按钮 2.定义事件,连接ws

    2024年02月03日
    浏览(47)
  • AI对话交互场景使用WebSocket建立H5客户端和服务端的信息实时双向通信

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许 服务端主动向客户端推送数据 。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HT

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包