使用WebSocket实现服务端向指定的客户端推送消息

2023-11-07

写这篇博客记录一下自己在用websocket的时候遇到的坑。
需求是这样的:需要将activeMq来的数据利用websockt推送给客户端显示出来,有多个服务终端,需要将不同的消息推送到对应的服务终端上。
1.服务端代码:需要写一个WebSocketServer类,里面根据自己需要重写方法,在写一个配置类WebSocketConfig就行了。下面上代码

WebSocketServer类:

@Component
//访问服务端的url地址
@ServerEndpoint(value = "/websocket/{id}")
public class WebSocketServer {
    private static int onlineCount = 0;
    private static ConcurrentHashMap<String, WebSocketServer> webSocketSet = new ConcurrentHashMap<>();

    //与某个客户端的连接会话,需要通过它来给客户端发送数据
    private Session session;
    private static Logger log = LogManager.getLogger(WebSocketServer.class);
    private String id = "";
    /**
     * 连接建立成功调用的方法*/
    @OnOpen
    public void onOpen(@PathParam(value = "id") String id, Session session) {
        this.session = session;
        this.id = id;//接收到发送消息的人员编号
        webSocketSet.put(id, this);     //加入set中
        addOnlineCount();           //在线数加1
        log.info("用户"+id+"加入!当前在线人数为" + getOnlineCount());
        System.out.println("连接成功");
        try {
            sendMessage("连接成功");
        } catch (IOException e) {
            log.error("websocket IO异常");
        }

    }

    /**
     * 连接关闭调用的方法
     */
    @OnClose
    public void onClose() {
        webSocketSet.remove(this);  //从set中删除
        subOnlineCount();           //在线数减1
        log.info("有一连接关闭!当前在线人数为" + getOnlineCount());
    }

    /**
     * 收到客户端消息后调用的方法
     *
     * @param message 客户端发送过来的消息*/
    @OnMessage
    public void onMessage(String message, Session session) {
        log.info("来自客户端的消息:" + message);
        //可以自己约定字符串内容,比如 内容|0 表示信息群发,内容|X 表示信息发给id为X的用户
        String sendMessage = message.split("[|]")[0];
        String sendUserId = message.split("[|]")[1];
        try {
            if(sendUserId.equals("0")) {
                sendtoAll(sendMessage);
            }else {
                sendtoUser(sendMessage, sendUserId);
            }
      
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用WebSocket实现服务端向指定的客户端推送消息 的相关文章

随机推荐

  • Android 实现护眼模式

    一 背景 在阅读软件或者儿童软件都需要护眼模式来降低蓝光的辐射 二 实现方案 首先在每个activity创建的时候在最上层添加一层view 去掉点击事件 用sp或者mmkv来存储当前是否打开护眼模式 在每次activity onresume
  • 二.基于nodejs express multer 上传图片功能实现+详细说明_番茄出品

    START 前几天熬夜做了一个基于nodejs的后端服务 连接mysql数据库搞定了 但是最近遇到上传图片一个需求 这如何实现呢 别着急 番茄带你一点一点实现 本文作者 lazy tomato 编写时间 2022 03 31 22 21 前
  • Linux教程:YUM与开源项目实战(Web运维)

    1 了解Linux软件的安装方式 2 掌握更新yum源 3 掌握YUM软件安装方式 4 了解LAMP环境以及AMP的关系 5 了解阿里云ECS的创建过程 6 能够yum方式搭建lamp环境 7 能够实现Discuz 论坛部署 8 能够购买域
  • Django入门教程

    Django入门教程 创建Django项目 django admin startproject mysite 这将在目录下生成一个mysite目录 也就是你的这个Django项目的根目录 它包含了一系列自动生成的目录和文件 具备各自专有的用
  • 聊聊FFT(二)----幅值、模值与分辨率

    以常见的家用交流220V 以下称AC220V 工频电信号为例 大家都知道家里的插座内有220V的电 可以给电饭锅 热水壶 空调冰箱等等电器供电 至于220V具体指的是什么可能非理工科背景的同学没有深究过 有效值又称 均方根值 一种用以计量交
  • 使用docker安装我们的ES启动时的异常解决

    一开始我启动失败 我一直是以为我们的内存大小分配的问题 es默认启动占用内存是2g docker run e ES JAVA OPTS Xms256m Xmx256m id p 1001 1001 p 9301 9301 v home es
  • CSDN周赛62期反馈及简要题解

    持续了十期的 计算之魂 主题周赛告一段落 可能上周就已经告一段落了 以致于也出现了重复的考题 这本书确实不错 里面提到的计算机思维我认为是理解和学习计算机科学的基础 第一次读此书的时候就一口气读到第八章 读到精彩之处 不禁拍案叫绝 在此也强
  • 三、Esp32引脚资源详细

    三 Esp32引脚资源详细 文章目录 三 Esp32引脚资源详细 3 1 仅输入引脚 3 2 SPI闪存 3 3 电容式触摸GPIO 3 4 模数转换器 ADC 3 5 数模转换器 DAC 3 6 RTC GPIOs 3 7 脉冲宽度调制
  • HashMap的面试题

    目录 1 底层数据结构 1 7和1 8有何不同 2 为什么用红黑树 为何不一上来就树化 树化阈值为何是8 何时会树化 何时会退化为链表 3 索引如何计算 hashCode都有了 为何还要提供hash 方法 数组容量为何是2的n次幂 4 Ha
  • C语言,使用指针计算每行最大值,每列最小值 ,void Max(int (*p)[],int line,int row) ,void Min(int (*p)[],int line,in

    使用指针计算每行最大值 每列最小值 void Max int p int line int row void Min int p int line int row include
  • Pandas基础(全)

    Pandas基础 全 引言 Pandas是基于Numpy的库 但功能更加强大 Numpy专注于数值型数据的操作 而Pandas对数值型 字符串型等多种格式的表格数据都有很好的支持 关于Numpy的基础知识 请查看 Numpy基础 全 内容介
  • 三相LCL变流器PR控制仿真及验证

    三相变流器 可单位功率因数整流 实现母线电压的泵升 可逆变并网实现能量回馈 它是一个三相AC DC双向电源 基于三相全控型半桥的双向变流器可用于很多领域 1 中大功率变频传动领域 例如电梯 可用于电梯下降过程中的能量回馈 大大节省电能 电梯
  • 网上传说软件测试培训真的那么黑心吗?都是骗局?

    今天一大早社区群因为 软件测试培训班靠不靠谱 的话题炸开了锅 就客观事实而言 当下的软件测试早已不复当年的混乱 再想说0基础进入软测行业 靠着一路摸爬滚打在工作中从无到有学会软测 如果没有贵人扶持 怕是万难 据相关调查数据显示 有79 53
  • windows server 2008 r2 搭建文件服务器

    windows server 2008 r2 搭建文件服务器 目的需求 在测试环境下模拟公司现状需求 利用windows server 搭建文件服务器 工具必备 1 vmware workstation 2 windows server 2
  • 图像处理中的卷积

    卷积是积分变换的方法 其在许多方面有广泛应用 卷积通过两个函数 f 和 g 生成第三个函数 可以看作是两个变量在某范围内相乘后求和的结果 设 f x g x 是两个可积函数 作积分 可以证明上述积分的存在性 随着x取值的不同 这个积分就定义
  • 展示PyEcharts图表到Django框架前端页面教程(逐步教程)

    官网教程参考 https pyecharts org zh cn web django id django e6 a8 a1 e6 9d bf e6 b8 b2 e6 9f 93 这篇博客与官网一样使用Ajax 不使用ajax 直接填充一个
  • Angular(2+)动画API用法详解

    动画相关的 API 都是在 angular animations里面引入的 import 你想要的API from angular animations 复制代码 trigger 由它触发动画效果 称动画触发器 function trigg
  • 微信小程序 scroll-view

    微信小程序 scroll view 用法 微信官方文档地址 https developers weixin qq com miniprogram dev component scroll view html 微信小程序 scroll vie
  • Docker部署 registry

    系列文章目录 Docker部署 registry Docker搭建 svn Docker部署 Harbor Docker 部署SQL Server 2017 Docker 安装 MS SqlServer Docker部署 Oracle12c
  • 使用WebSocket实现服务端向指定的客户端推送消息

    写这篇博客记录一下自己在用websocket的时候遇到的坑 需求是这样的 需要将activeMq来的数据利用websockt推送给客户端显示出来 有多个服务终端 需要将不同的消息推送到对应的服务终端上 1 服务端代码 需要写一个WebSoc