当前位置: 首页 > article >正文

SpringBoot WebSocket客户端与服务端一对一收发信息

依赖

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

配置类

@Configuration
public class WebSocketConfig  {
    @Bean //方法返回值交给springboot管理
    public ServerEndpointExporter serverEndpointExporter(){
        return  new ServerEndpointExporter();
    }
}

前端发送格式

ws://127.0.0.1:8080/chat/123456
123456为用户ID

{
    "id":"123456", //后端需要根据这个id回复
    "msg":"123" //前端发送的内容
}

在这里插入图片描述

收发消息

@ServerEndpoint("/chat/{id}") //请求路径
@Component
public class WebChat {

    private  static  final Map<String,Session> sessionMap = new ConcurrentHashMap<>() ;
    //存取用户

    @OnOpen //用户连接时
    public void onOpen(Session session,@PathParam(value = "id") String id){
        sessionMap.put(id,session); //用户连接成功 保存用户信息
    }
    @OnMessage //用户收到信息时
    public void onMessage(String message)  {
        JSONObject jsonObject = JSON.parseObject(message);
        String id =jsonObject.getString("id"); //用户id
        String msg =jsonObject.getString("msg"); //用户发送的信息

        Session session =sessionMap.get(id);//根据id获取Session
        session.getAsyncRemote().sendText("已收到消息,你的ID是"+id); //回复消息
    }
    

    public  void  sendMessage(String id,String message){
        Session  session= sessionMap.get(id);
        session.getAsyncRemote().sendText(id);
    }

    @OnClose
    public  void onClose(){

    }

http://www.kler.cn/a/233312.html

相关文章:

  • 数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用
  • JAVA:探索 EasyExcel 的技术指南
  • 国家网络安全法律法规
  • Elasticsearch 8.16:适用于生产的混合对话搜索和创新的向量数据量化,其性能优于乘积量化 (PQ)
  • 深度学习——优化算法、激活函数、归一化、正则化
  • Thread类及常见方法
  • html5 audio video
  • [高性能] - 缓存架构
  • 《走进科学》灵异事件:Nginx配置改了之后一直报错
  • 使用 WMI 查询安全软件信息
  • C/C++ 关于 SHA256 的使用
  • B站弹幕分析系统
  • Python爬虫实战:抓取猫眼电影排行榜top100#4
  • React18原理: 生命周期中特别注意事项
  • 大数据之Hadoop3简单入门(一)(通俗易懂)
  • 5-4、S加减单片机程序【51单片机+L298N步进电机系列教程】
  • C语言笔试题之两数相加(多次反转链表实现)
  • Git中为常用指令配置别名
  • Go 中如何检查文件是否存在?可能产生竞态条件?
  • re:从0开始的CSS学习之路 4. 长度单位
  • 2月05日,每日信息差
  • SolidWorks学习笔记——入门知识2
  • 用C语言列出Linux或Unix上的网络适配器
  • 【C语言】深入理解指针
  • 从一到无穷大 #23 《流计算系统图解》书评
  • Netty应用(一) 之 NIO概念 基本编程