当前位置:首页 » 《关于电脑》 » 正文

Spring Boot整合WebSocket实现实时通信,前端实时通信,前后端实时通信

2 人参与  2024年05月14日 13:31  分类 : 《关于电脑》  评论

点击全文阅读


Spring Boot整合WebSocket实现实时通信

实时通信在现代Web应用中扮演着越来越重要的角色,无论是在线聊天、股票价格更新还是实时通知,WebSocket都是实现这些功能的关键技术之一。Spring Boot作为一个简化企业级应用开发的框架,其对WebSocket的支持也非常友好。本文将详细介绍如何在Spring Boot中整合WebSocket,实现一个简单的实时通信服务。

引言

在 Spring Boot 中使用 WebSocket 有 2 种方式。第 1 种是使用由 Jakarta EE 规范提供的 Api,也就是 jakarta.websocket 包下的接口。第 2 种是使用 spring 提供的支持,也就是 spring-websocket 模块。前者是一种独立于框架的技术规范,而后者是 Spring 生态系统的一部分,可以与其他 Spring 模块(如 Spring MVC、Spring Security)无缝集成,共享其配置和功能。因为是进行学习进行使用webSocket所以进行选择第一种方式来进行实现.

本文将使用第 1 种方式,也就是使用 jakarta.websocket 来开发 WebSocket 应用。

1. 环境准备

JDK 1.8 或更高版本Spring Boot 2.xIntelliJ IDEA / Eclipse (或其他Java IDE)Maven 或 Gradle 作为构建工具springboot版本:3.2.5

2. 添加依赖

打开pom.xml文件,并添加WebSocket相关的依赖.

<!--实时通信webSocket依赖-->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-websocket</artifactId>        </dependency>

3. 开发 ServerEndpoint 端点

ServerEndpoint是一个注解,用于定义WebSocket服务器端点。使用这个注解,你可以指定WebSocket的URL模式,以便客户端能够连接到你的服务.

package com.fs.webSocket;import jakarta.websocket.*;import jakarta.websocket.server.ServerEndpoint;// 这个和Controller的作用是类似的@ServerEndpoint(value = "/websocket") // 此类是一个webSocket端点 服务端,监听/websocket的路径public class MyServerEndpoint {    // 定义一个Session对象    private Session session;    // 客户端与服务端建立连接触发    @OnOpen    public void onOpen(Session session) {        // 保存session        this.session = session;        System.out.println("websocket连接成功");    }    // 客户端向服务端发送消息    @OnMessage    public void onMessage(String message) {        System.out.println("收到客户端消息:" + message);    }    // 客户端服务端连接异常触发    @OnError    public void onError(Session session, Throwable error) {        System.out.println("websocket连接异常");    }    // 客户端与服务端断开连接触发    @OnClose    public void onClose(Session session) {        System.out.println("websocket连接关闭");    }}

注意:所有事件方法,都支持使用 Session 作为参数,表示当前连接参数。但是为了更加方便,我们在 @OnOpen 事件中直接把 Session 存储到了当前对象中,可以在任意方法中使用 this 访问。服务器会为每个连接创建一个端点对象,所以这是线程安全的。

4. 配置webSocket

@Configurationpublic class WebSocketConfig {    @Bean    public ServerEndpointExporter serverEndpointExporter() {        ServerEndpointExporter exporter = new ServerEndpointExporter();        exporter.setAnnotatedEndpointClasses(MyServerEndpoint.class); // 进行手动注册webSocket端点        return exporter;    }}

当然也可以在MyServerEndpoint这个类上面进行添加 @Component注解,Spring 自动扫描,这样的话不需要手动调用 setAnnotatedEndpointClasses 方法进行注册。

5.前端集成测试

在资源文件夹resorces/static/index.html中书写一个简单的前端websocket进行连接到服务器通信,

<!DOCTYPE html><html><head>    <meta charset="UTF-8">    <title>WebSocket</title></head><body><script type="text/javascript">    let websocket = new WebSocket("ws://localhost:8080/websocket");    // 连接断开    websocket.onclose = e => {        console.log(`连接关闭: code=${e.code}, reason=${e.reason}`)    }    // 收到消息    websocket.onmessage = e => {        console.log(`收到消息:${e.data}`);    }    // 异常    websocket.onerror = e => {        console.log("连接异常")        console.error(e)    }    // 连接打开    websocket.onopen = e => {        console.log("连接打开");        // 创建连接后,往服务器连续写入3条消息        websocket.send("sprigdoc.cn");        websocket.send("sprigdoc.cn");        websocket.send("sprigdoc.cn");        // 最后发送 bye,由服务器断开连接        websocket.send("bye");        // 也可以由客户端主动断开        // websocket.close();    }</script></body></html>

启动应用,打开浏览器(先打开控制台),然后访问 http://localhost:8080/,查看控制台服务端输出的日志:

websocket连接成功收到客户端消息:sprigdoc.cn收到客户端消息:sprigdoc.cn收到客户端消息:sprigdoc.cn收到客户端消息:bye

此时代表连接成功!!!

结语

通过以上步骤,我们已经创建了一个简单的Spring Boot WebSocket的连接。展示了如何使用Spring Boot和WebSocket实现实时通信的基础。在实际项目中,你可能需要考虑更多的因素,如安全性、连接管理、广播优化等。

希望这篇教程能够帮助你开始探索Spring Boot与WebSocket的整合。如果你有任何疑问或建议,请在评论区告诉我。祝你编程愉快!

附录

Spring Boot官方文档: https://docs.spring.io/spring-boot/docs/current/reference/html/websocket.htmlWebSocket协议规范: https://tools.ietf.org/html/rfc6455

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/108381.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 万物复苏,末世来临热门小说苏愉薛遇(万物复苏,末世来临热门小说)全文免费阅读无弹窗大结局_(苏愉薛遇免费阅读全文大结局)最新章节列表_笔趣阁(苏愉薛遇) -
  • 军婚撩人:八零娇妻火辣辣最新热门小说冯晚禾薛战城全文免费阅读无弹窗大结局_(冯晚禾薛战城)冯晚禾薛战城最新章节列表笔趣阁(军婚撩人:八零娇妻火辣辣最新热门小说) -
  • 顾凡任盈盈《快穿之扫地僧在武林杀疯了全集》全文免费阅读无弹窗大结局_(顾凡任盈盈)最新章节免费在线阅读 -
  • 快穿之扫地僧在武林杀疯了完结版(顾凡任盈盈)全文免费阅读无弹窗大结局_(快穿之扫地僧在武林杀疯了完结版小说免费阅读)最新章节列表_笔趣阁(快穿之扫地僧在武林杀疯了完结版) -
  • 免费完结版小说回家过年,我把侄子送进了少管所_回家过年,我把侄子送进了少管所(林晓孟倩林浩)免费小说全本_全本免费完结小说回家过年,我把侄子送进了少管所
  • 书荒宝藏文《简星星江桁》简星星江桁(小说全文阅读无弹窗)全文免费阅读
  • 《江雨柔苏宸》已完结(江雨柔苏宸)热门小说完整版)全文阅读笔趣阁
  • 回家过年,我把侄子送进了少管所(林晓孟倩林浩)阅读免费小说_全本免费小说阅读回家过年,我把侄子送进了少管所(林晓孟倩林浩)最新更新
  • 最新免费小说除夕夜大伯心梗,我替婆婆送花圈油爱芳瑶瑶_除夕夜大伯心梗,我替婆婆送花圈(油爱芳瑶瑶)热门小说推荐
  • 搬空钱财:下乡的娇知青她军婚了全集姜温婉周云霆(搬空钱财:下乡的娇知青她军婚了全集)全文免费阅读无弹窗大结局_(姜温婉周云霆免费阅读全文大结局)最新章节列表_笔趣阁(姜温婉周云霆) -
  • 情深几许再难圆热门小说免费(陈墨燃沈心宁)全文免费阅读无弹窗大结局_(情深几许再难圆热门小说小说免费阅读)最新章节列表_笔趣阁(情深几许再难圆热门小说) -
  • 伽蓝如梦情如尘完结版阅读(林清规梵清)全文免费阅读无弹窗大结局_(伽蓝如梦情如尘完结版阅读)林清规梵清最新章节列表_笔趣阁(伽蓝如梦情如尘完结版阅读) -

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1