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

目录

一、简介

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

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

聊天室页面展示

Cluster Support

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

二、RabbitMq启用STOMP

bash 复制代码
# linux 
rabbitmq-plugins enable  rabbitmq_stomp

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

windows安装结果

bash 复制代码
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_management
  rabbitmq_management_agent
  rabbitmq_stomp
  rabbitmq_web_dispatch
Applying plugin configuration to rabbit@TSD-LUOHQ...
The following plugins have been enabled:
  rabbitmq_stomp

set 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") 接收聊天消息
相关推荐
汤愈韬4 小时前
三种常用 NAT 的经典案例
网络协议·网络安全·security
汤愈韬5 小时前
NAT Server 与目的Nat
网络·网络协议·网络安全·security
7ACE6 小时前
Wireshark TS | TLP 超时时间
网络·网络协议·tcp/ip·wireshark·tcpdump
ai_coder_ai11 小时前
在自动化脚本中如何使用websocket?
websocket·autojs·自动化脚本·冰狐智能辅助·easyclick
凯瑟琳.奥古斯特12 小时前
NAT原理及作用详解
网络·网络协议
_Evan_Yao14 小时前
从 IP 路由到 Agent 路由:最长前缀匹配如何帮你分发任务?
java·网络·后端·网络协议·tcp/ip
数据法师1 天前
开源情报收集工具GhostTrack深度测评:IP、手机号、用户名的合规信息查询方案
网络·网络协议·tcp/ip
想成为优秀工程师的爸爸1 天前
第三十篇技术笔记:郭大侠学UDS - 人有生老三千疾,望闻问切良方医
网络·笔记·网络协议·tcp/ip·信息与通信
灰子学技术1 天前
Envoy HTTP Connection Manager (HCM) 技术文档
网络·网络协议·http
Dontla1 天前
aio-pika介绍(基于asyncio的Python异步消息队列客户端,用于操作RabbitMQ,并实现对AMQP协议支持)
python·rabbitmq·ruby