当前位置:首页 > 科技  > 软件

详解基于SpringBoot的WebSocket应用开发

来源: 责编: 时间:2024-03-19 09:22:30 293观看
导读在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用户体验。本文将详细介绍如何在Spring Boot

15028资讯网——每日最新资讯28at.com

在现代Web应用中,实时交互和数据推送的需求日益增长。WebSocket协议作为一种全双工通信协议,允许服务端与客户端之间建立持久性的连接,实现实时、双向的数据传输,极大地提升了用户体验。本文将详细介绍如何在Spring Boot框架中使用WebSocket进行高效、稳定的实时通信。15028资讯网——每日最新资讯28at.com

WebSocket简介

WebSocket是一种在单个TCP连接上进行全双工通信的协议,其最大的特点是服务器可以主动向客户端发送消息,而不需要客户端先发起请求。相较于传统的HTTP长轮询或轮询机制,WebSocket能有效减少不必要的网络通信开销,并提供更优的实时性。15028资讯网——每日最新资讯28at.com

SpringBoot集成WebSocket

添加依赖

首先,在Spring Boot项目中引入WebSocket支持。在pom.xml文件中添加如下依赖:15028资讯网——每日最新资讯28at.com

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

创建WebSocket配置类

创建一个WebSocket配置类,通过WebSocketConfigurer接口来自定义WebSocket处理逻辑。例如:15028资讯网——每日最新资讯28at.com

@Configuration@EnableWebSocketpublic class WebSocketConfig implements WebSocketConfigurer {    @Override    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {        // 注册WebSocket处理器,指定访问路径        registry.addHandler(myWebSocketHandler(), "/webSocket/{sid}");    }    @Bean    public WebSocketHandler myWebSocketHandler() {        return new MyWebSocketHandler();    }}

实现WebSocket处理器

创建一个实现WebSocketHandler接口的类,如MyWebSocketHandler,并重写其中的方法以处理WebSocket的生命周期事件(如打开、关闭、接收消息等):15028资讯网——每日最新资讯28at.com

@Componentpublic class MyWebSocketHandler implements WebSocketHandler {    private static final CopyOnWriteArraySet<MyWebSocketHandler> webSocketSet = new CopyOnWriteArraySet<>();    private Session session;    private String sid;    @Override    public void afterConnectionEstablished(Session session) throws Exception {        this.session = session;        sid = session.getAttributes().get("sid").toString();        webSocketSet.add(this);        log.info("WebSocket连接已建立, sid: {}", sid);    }    @Override    public void handleMessage(String message, Session session) throws IOException {        log.info("接收到{}的信息: {}", sid, message);        // 群发消息或其他处理逻辑        for (MyWebSocketHandler item : webSocketSet) {            try {                if (item.sid.equals(sid)) {                    item.sendMessage(message);                }            } catch (IOException e) {                log.error("发送消息时发生错误", e);            }        }    }    @Override    public void handleTransportError(Throwable exception, Session session) {        if (session.isOpen()) {            session.close();        }        webSocketSet.remove(this);        log.error("WebSocket连接发生错误", exception);    }    @Override    public void afterConnectionClosed(Session session, CloseStatus status) {        webSocketSet.remove(this);        log.info("WebSocket连接已关闭, sid: {}, 原因: {}", sid, status.getReason());    }    @Override    public boolean supportsPartialMessages() {        return false;    }    private void sendMessage(String message) throws IOException {        session.getBasicRemote().sendText(message);    }        // 可以增加根据sid筛选的消息推送方法    public static void sendInfo(SocketMsg socketMsg, String targetSid) throws IOException {        // ...    }}

客户端连接WebSocket

在前端JavaScript代码中使用WebSocket API与后端建立连接,并处理各种事件:15028资讯网——每日最新资讯28at.com

var ws = new WebSocket('ws://localhost:8080/webSocket/' + uniqueSessionId);ws.onopen = function(event) {    console.log('WebSocket连接已建立');};ws.onmessage = function(event) {    console.log('接收到服务器消息:', event.data);};ws.onerror = function(error) {    console.error('WebSocket连接发生错误:', error);};ws.onclose = function(event) {    console.log('WebSocket连接已关闭,原因:', event.reason);};// 发送消息到服务器ws.send(JSON.stringify({message: 'Hello, Server!'}));

总结

通过上述步骤,我们已经在Spring Boot项目中成功实现了WebSocket功能。需要注意的是,实际应用场景中可能需要对用户权限、连接管理、消息队列、心跳检测等功能进行更细致的设计与实现,以确保WebSocket服务的稳定性和性能表现。同时,WebSocket技术的应用场景非常广泛,包括但不限于即时聊天、在线协作、实时监控等。15028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-77680-0.html详解基于SpringBoot的WebSocket应用开发

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Rust学习笔记:基础概念介绍

下一篇: Vue3问题:如何在页面上添加水印?

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 疑似小米14外观设计图曝光:后置相机模组变化不大

    下半年的大幕已经开启,而谁将成为下半年手机圈的主角就成为了大家关注的焦点,其中被传有望拿下新一代骁龙8 Gen3旗舰芯片的小米14系列更是备受大家瞩
  • 由于成本持续增加,笔记本产品价格预计将明显上涨

    根据知情人士透露,由于材料、物流等成本持续增加,笔记本产品价格预计将在2021年下半年有明显上涨。进入6月下旬以来,全球半导体芯片缺货情况加剧,显卡、处理器
Top