快速完成聊天室核心功能
学习和使用springBoot框架下的websocket,完成聊天室的核心功能

通过阅读文档,配合官方demo,快速的学习和使用websocket技术
服务端 基础版
springBoot WebSocket
Maven依赖
1 | <!--WebSocket--> |
配置类
1 | package cn.shirtiny.community.SHcommunity.Config; |
Endpoint为客户端连接服务端websocket服务,服务端通过SimpleBroker控制客户端的订阅的主题、频道,客户端发送消息时,需要带ApplicationDestinationPrefixes中的前缀。
Controller
1 |
|
@MessageMapping("/sendToRoom"),使用上类似于@RequestMapping,不过客户端发送消息时,需要带上ApplicationDestinationPrefixe前缀,如:/app/sendToRoom,使用的为ws协议,完整的写法为:ws://ip:port/app/sendToRoom。@SendTo("/room/chat")会把返回结果广播到/room/chat频道
客户端 基础版
sockjs-client + stomp-websocket
Maven依赖
1 | <dependency> |
springBoot可以用这种方式使用静态资源,前端页面引入方式:
1 | <script src="/webjars/sockjs-client/sockjs.min.js"></script> |
建立连接
1 | //连接socket |
断开连接
1 | //断开socket连接 |
订阅频道
每次订阅都将生成一个客户端id,订阅后会持续接收服务端的广播,每次接收都会更新响应数据
1 | //订阅频道 |
取消订阅
取消订阅需要使用之前此订阅对象的unsubscribe()方法
1 | //取消订阅聊天室频道 |
发送消息
需要带有指定前缀,header可以为空
1 | //发送消息 |
案例
我以我社区的聊天室为例,前端样式上使用了elmentUI的表格,然后进行了自定义:

目前仍在完善中。
前端Vue+Element
1 |
|
在聊天室业务中,我们需要在新消息收到后,将滚动条下拉,以便显示新消息。如果使用传统或自定义的组件,这个没有任何问题。
注意,需要在页面渲染完成后再操作滚动条
这里我选用了el-table组件,但其并未对此有相关说明。这里我只能选中el-table的元素进行dom操作:
1 | //选中el-table的滚动条元素 |
1 | //判断滚动条是否在底部 |
后端springBoot
仍在完善中。
1 | package cn.shirtiny.community.SHcommunity.Controller; |
表结构
ChatHistory
1 | package cn.shirtiny.community.SHcommunity.Model; |
ChatMessage
1 | package cn.shirtiny.community.SHcommunity.Model; |
DTO对象
1 | package cn.shirtiny.community.SHcommunity.DTO; |
1 | package cn.shirtiny.community.SHcommunity.DTO; |