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

基于WebSocket + STOMP + SockJS + RabbitMq的聊天室Demo

目录

    • 一、简介
    • 二、RabbitMq启用STOMP
    • 三、相关Destination说明

一、简介

老早之前写的一个基于WebSocket + STOMP + SockJS + RabbitMq的聊天室Demo,感兴趣的小伙伴可以鼓捣一下。

  • 相关技术:WebSocket + STOMP + SockJS + RabbitMq
  • 核心功能:支持广播消息、给指定用户发消息
  • 后端支持集群部署,且客户端到后端需支持会话保持

聊天室页面展示
在这里插入图片描述在这里插入图片描述

Cluster Support
在这里插入图片描述

具体代码参见:
https://gitee.com/luoex/spring-boot-websocket-chat-demo

二、RabbitMq启用STOMP

# linux 
rabbitmq-plugins enable  rabbitmq_stomp# windows(执行完如下命令后需重启RabbitMQ服务)
rabbitmq-plugins.bat enable rabbitmq_stomp

windows安装结果

D:\programs\RabbitMq3.9.11\rabbitmq_server-3.9.11\sbin>rabbitmq-plugins.bat enable rabbitmq_stomp
Enabling plugins on node rabbit@TSD-LUOHQ:
rabbitmq_stomp
The following plugins have been configured:rabbitmq_managementrabbitmq_management_agentrabbitmq_stomprabbitmq_web_dispatch
Applying plugin configuration to rabbit@TSD-LUOHQ...
The following plugins have been enabled:rabbitmq_stompset 4 plugins.
Offline change; changes will take effect at broker restart.

在这里插入图片描述

三、相关Destination说明

destionation分为3种类型:

  • 广播 - /topic前缀,向所有订阅此类destination的客户端发布消息
  • 单播 - /user前缀,仅向所有订阅此类destination的指定用户的客户端发送消息(仅客户端使用/user前缀,后端无需使用/user前缀)
  • 应用处理 - /app前缀,可有客户端向此类destination发布消息,然后由后端@Controller类中的@MessageMapping方法接收消息并处理(仅客户端使用/app前缀,后端无需使用/app前缀)
类型前缀类型说明前缀使用说明
广播/topic向所有订阅此类destination的客户端发布消息,
例如:/topic/public
前后端均需使用/topic前缀
单播/user仅向所有订阅此类destination的指定用户的客户端发送消息,
例如:/user/msg
仅客户端使用/user前缀,后端无需使用/user前缀
应用处理/app可有客户端向此类destination发布消息,然后由后端@Controller类中的@MessageMapping方法接收消息并处理,
例如:/app/chat.sendMessage
仅客户端使用/app前缀,后端无需使用/app前缀

客户端相关destination:

destination关联方式说明
/topic/public订阅接收广播消息
/user/topic/msg订阅接收个人专属消息
/app/chat.addUser发布发布当前用户上线消息
/app/chat.sendMessage发布发布聊天消息

服务端相关destination:

destination关联方式说明
/topic/public发布发布广播消息
/topic/msg发布发布个人专属消息
/chat.addUser订阅
@MessageMapping(“/chat.addUser”)
接收当前用户上线消息
/chat.sendMessage订阅
@MessageMapping(“/chat.sendMessage”)
接收聊天消息
http://www.dtcms.com/a/609614.html

相关文章:

  • 物流网站的建设方案总结传奇网站源码下载
  • 公司网站是别人做的如何换logo万网ip
  • C语言编译链接过程解析与优化
  • 【Git学习】Git的使用命令1
  • vscode c语言如何编译 | 简单步骤与常见问题解析
  • CSS `border-image` 给文字加可拉伸边框
  • Enum Output Parser in LangChain
  • Problem: lab-week10-exercise02 Building a Fiber Network
  • 在 Linux 环境中配置 Eclipse 以开发 Hadoop 应用
  • 新手如何自己做网站app网站建设存在的困难问题
  • 视觉学习——卷积与神经网络:从原理到应用(量大管饱)
  • java 给鉴权kafka2.7(sasl)发送消息权限异常处理
  • 手机论坛网站源码和卫通app下载
  • 零基础学JAVA--Day32(ArrayList底层+Vector+LinkedList)
  • 了解Bootstrap ——初学者
  • 启动Nginx
  • 手机编程网站网站建设软件是什么意思
  • 设计兼职网站推荐自己做的网站网页错位
  • 第1章 机器学习的诞生与演化
  • 从零开始刷算法——二分-搜索旋转排序数组
  • Spring Boot + Vue 全栈开发实战指南
  • 深度智能体-人机回环
  • ASC学习笔记0013:添加一个新的属性集(初始化为默认值)
  • SpringIOC-注解
  • 关闭网站跳转代码wordpress 图片云存储
  • Java练习——数组练习
  • 导航仪企业网站源码那个网站做拍手比较好
  • 离别的十字路口: 是否还记得曾经追求的梦想
  • 3D地球可视化教程 - 第4篇:第5篇:星空背景与粒子系统
  • Unity Shader Graph 3D 实例 - 一个简单的红外线扫描全身效果