iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >如何搭建springboot+websocket+redis
  • 560
分享到

如何搭建springboot+websocket+redis

2023-06-14 11:06:14 560人浏览 八月长安
摘要

本篇内容主要讲解“如何搭建SpringBoot+websocket+redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何搭建springboot+WEBSocket+Redis”吧!在多

本篇内容主要讲解“如何搭建SpringBoot+websocket+redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何搭建springboot+WEBSocket+Redis”吧!

在多负载环境下使用websocket。

一、原因

在某些业务场景,我们需要页面对于后台的操作进行实时的刷新,这时候就需要使用websocket。

通常在后台单机的情况下没有任何的问题,如果后台经过Nginx等进行负载的话,则会导致前台不能准备的接收到后台给与的响应。socket属于长连接,其session只会保存在一台服务器上,其他负载及其不会持有这个session,此时,我们需要使用redis的发布订阅来实现,session的共享。

二、环境准备

https://mvnrepository.com/里,查找websocket的依赖。使用springboot的starter依赖,注意对应自己springboot的版本。

如何搭建springboot+websocket+redis

<!-- Https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket --><dependency>    <groupId>org.springframework.boot</groupId>    <artifactId>spring-boot-starter-websocket</artifactId>    <version>2.2.10.RELEASE</version></dependency>

除此之外添加redis的依赖,也使用starter版本:

<!-- redis -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>

三、代码

redis监听配置:

@Configurationpublic class RedisConfig {        @Bean    public RedisMessageListenerContainer redisMessageListenerContainer(RedisConnectionFactory redisConnectionFactory) {        RedisMessageListenerContainer container = new RedisMessageListenerContainer();        container.setConnectionFactory(redisConnectionFactory);        return container;    }}

webSocket配置:

@Configurationpublic class WebSocketConfig {        @Bean    public ServerEndpointExporter serverEndpointExporter(){        return new ServerEndpointExporter();    }}

redis工具类:

@Componentpublic class RedisUtil {    @Autowired    private StringRedisTemplate stringRedisTemplate;        public void publish(String key, String value) {        stringRedisTemplate.convertAndSend(key, value);    }}

WebSocket服务提供类:

@Slf4j@Component@ServerEndpoint("/websocket/server/{loginName}")public class WebSocketServer {        private RedisMessageListenerContainer redisMessageListenerContainer =            ApplicationContextProvider.getBean(RedisMessageListenerContainer.class);        private static AtomicInteger onlineCount = new AtomicInteger(0);        private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<WebSocketServer>();        private Session session;        private SubscribeListener subscribeListener;        @OnOpen    public void onOpen(@PathParam("loginName") String loginName, Session session) {        this.session = session;        //加入set中        webSocketSet.add(this);        //在线数加1        addOnlineCount();        log.info("有新连接[" + loginName + "]加入!当前在线人数为{}", getOnlineCount());        subscribeListener = new SubscribeListener();        subscribeListener.setSession(session);        //设置订阅topic        redisMessageListenerContainer.addMessageListener(                subscribeListener, new ChannelTopic(Constants.TOPIC_PREFIX + loginName));    }        @OnClose    public void onClose() throws IOException {        //从set中删除        webSocketSet.remove(this);        //在线数减1        subOnlineCount();        redisMessageListenerContainer.removeMessageListener(subscribeListener);        log.info("有一连接关闭!当前在线人数为{}", getOnlineCount());    }        @OnMessage    public void onMessage(String message, Session session) {        log.info("来自客户端的消息:{}", message);        //群发消息        for (WebSocketServer item : webSocketSet) {            try {                item.sendMessage(message);            } catch (IOException e) {                log.info("发送消息异常:msg = {}", e);                continue;            }        }    }        @OnError    public void onError(Session session, Throwable error) {        log.info("发生错误,{}", error);    }        public void sendMessage(String message) throws IOException {        this.session.getBasicRemote().sendText(message);    }    public int getOnlineCount() {        return onlineCount.get();    }    public void addOnlineCount() {        WebSocketServer.onlineCount.getAndIncrement();    }    public void subOnlineCount() {        WebSocketServer.onlineCount.getAndDecrement();    }}

redis消息发布:

@Autowired    private RedisUtil redisUtil;    @Override    public Result send(String loginName, String msg) {        //推送站内信webSocket        redisUtil.publish("TOPIC" + loginName, msg);        return Result.success();    }

前端Vue代码:

<template>  <div class="dashboard-container">    <div class="dashboard-text">消息内容: {{ responseData }}</div>  </div></template><script>  import {mapGetters} from 'vuex'  export default {    data() {      return {        websocket: null,        responseData: null      }    },    created() {      this.initWebSocket();    },    destroyed() {      this.websock.close() //离开路由之后断开websocket连接    },    methods: {      //初始化websocket      initWebSocket() {        const wsUri = "ws://127.0.0.1:21116/websocket/server/" + "admin";        this.websock = new WebSocket(wsUri);        this.websock.onmessage = this.websocketonmessage;        this.websock.onopen = this.websocketonopen;        this.websock.onerror = this.websocketonerror;        this.websock.onclose = this.websocketclose;      },      websocketonopen() { //连接建立之后执行send方法发送数据        let actions = {"用户账号": "admin"};        this.websocketsend(JSON.stringify(actions));      },      websocketonerror() {//连接建立失败重连        this.initWebSocket();      },      websocketonmessage(e) { //数据接收        const redata = jsON.parse(e.data);        this.responseData = redata;      },      websocketsend(Data) {//数据发送        this.websock.send(Data);      },      websocketclose(e) {  //关闭        console.log('断开连接', e);      },    },    name: 'Dashboard',    computed: {      ...mapGetters([        'name',        'roles'      ])    }  }</script>

四、测试

如何搭建springboot+websocket+redis

发送前

如何搭建springboot+websocket+redis

发送后

到此,相信大家对“如何搭建springboot+websocket+redis”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何搭建springboot+websocket+redis

本文链接: https://www.lsjlt.com/news/270351.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何搭建springboot+websocket+redis
    本篇内容主要讲解“如何搭建springboot+websocket+redis”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何搭建springboot+websocket+redis”吧!在多...
    99+
    2023-06-14
  • springboot+websocket+redis搭建的实现
    在多负载环境下使用websocket。 一、原因 在某些业务场景,我们需要页面对于后台的操作进行实时的刷新,这时候就需要使用websocket。 通常在后台单机的情况下没有任何的问...
    99+
    2024-04-02
  • php如何搭建websocket环境
    这篇文章主要介绍“php如何搭建websocket环境”,在日常操作中,相信很多人在php如何搭建websocket环境问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”php如何搭建websocket环境”的疑...
    99+
    2023-07-04
  • 如何使用WebSocket+SpringBoot+Vue搭建简易网页聊天室
    今天小编给大家分享一下如何使用WebSocket+SpringBoot+Vue搭建简易网页聊天室的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们...
    99+
    2023-07-06
  • golang搭建websocket
    Golang是一种快速编译、高效、安全的编程语言,在Web开发方面也有着广泛的应用。其中,使用Golang搭建Websocket是一个非常流行的应用场景。本文将介绍如何使用Golang搭建一个Websocket应用程序。一、什么是Webso...
    99+
    2023-05-22
  • 如何在spring环境中搭建websocket
    今天就跟大家聊聊有关如何在spring环境中搭建websocket,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。本文基于Apach Tomcat 8.0.3+MyEclipse+ma...
    99+
    2023-05-31
    spring websocket bs
  • redis集群如何搭建
    这篇文章给大家分享的是有关redis集群如何搭建的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。介绍安装环境与版本用两台虚拟机模拟6个节点,一台机器3个节点,创建出3 master...
    99+
    2024-04-02
  • 如何搭建redis集群
    这篇文章主要讲解了“如何搭建redis集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何搭建redis集群”吧!redis集群搭建在开始redis集群搭建之前,我们先简单回顾一下redi...
    99+
    2023-06-25
  • Linux下如何搭建Redis
    这篇文章主要介绍了Linux下如何搭建Redis,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Redis 是一个高性能的key-value数据库。 redis的出现,很大程度...
    99+
    2023-06-28
  • SpringBoot如何快速搭建
    这篇文章主要介绍SpringBoot如何快速搭建,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Boot 概述Build Anything with Spring Boot:Spring Boot is ...
    99+
    2023-06-02
  • 如何使用nodejs搭建websocket服务器
    这篇文章给大家分享的是有关如何使用nodejs搭建websocket服务器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 简单开始1.安装node。https://no...
    99+
    2024-04-02
  • springboot如何集成websocket
    这篇文章主要介绍了springboot如何集成websocket,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 原生注解pom.xml<dependency>...
    99+
    2023-06-22
  • docker如何搭建redis集群
    要搭建Redis集群,可以使用Docker来进行部署。下面是一种常见的方法:1. 创建一个文件夹,在文件夹中创建一个名为`docke...
    99+
    2023-08-23
    docker redis
  • eclipse如何搭建springboot框架
    要在Eclipse中搭建Spring Boot框架,可以按照以下步骤进行操作:1. 首先,确保已经安装了Java Developme...
    99+
    2023-10-08
    eclipse springboot
  • SpringBoot集成使用Redis及搭建过程
    目录SpringBoot集成使用redis搭建1.导入jar包2.配置连接redis3.添加配置类RedisConfig4.注入RedisTemplate5.测试和使用使用实例:Sp...
    99+
    2024-04-02
  • Windows下如何搭建Redis集群
    这篇文章给大家分享的是有关Windows下如何搭建Redis集群的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Redis集群:如果部署到多台电脑,就跟普通的集群一样;因为Redis是单线程处理的,多核CPU也只能...
    99+
    2023-06-29
  • redis哨兵模式如何搭建
    Redis哨兵模式是一种高可用性的Redis部署架构,它通过监控Redis主节点的状态,并在主节点失效时自动将其中一个从节点升级为主...
    99+
    2023-10-24
    redis
  • 如何搭建Redis集群环境
    本篇文章为大家展示了如何搭建Redis集群环境,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1 Redis集群环境搭建方便起见,这里集群环境的所有节点全部位于同一个...
    99+
    2024-04-02
  • Redis框架如何搭建SpringBoot2.X
    这篇文章主要介绍Redis框架如何搭建SpringBoot2.X,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、使用Spring Initializr创建项目web项目1、File...
    99+
    2024-04-02
  • Docker-Compose如何搭建Redis集群
    本篇内容介绍了“Docker-Compose如何搭建Redis集群”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 集群配置3主+3从由于...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作