SpringBoot+Netty+ws的分布式聊天室
文章平均质量分 81
基于黑马程序员本地聊天室案例,将Netty与WebSocket和SpringBoot集成,Netty服务的负载均衡选择Nginx即可,在需要使用分布式锁的地方标记TODO,具体实现方式请自行选择
爱飞的男孩
这个作者很懒,什么都没留下…
展开
-
Netty分布式聊天室 - 语音视频聊天
基于Netty的分布式聊天室的项目到此结束,这只是一个示例项目,还需要丰富一下细节, 但正常的使用已经没有问题了dftdla/NettyChatCloud - 码云 - 开源中国 (gitee.com)原创 2023-12-05 18:05:50 · 736 阅读 · 0 评论 -
Netty分布式聊天室 - 群聊功能
群聊功能如下:创建群聊、加入群聊、退出群聊、获取群聊成员、在群聊中发送消息基于我们之前对于私聊的完善,实际上群聊功能对于我们目前的系统而言只是crud的重复操作。原创 2023-12-03 18:07:59 · 540 阅读 · 0 评论 -
Netty分布式聊天室 - 单聊缓存消息优化
前文提到我们的单聊只缓存了一条数据,这只是测试整个流程用的中间状态对于实际的聊天室,这显然是不合理的我们只需要把redis缓存的数据类型改为List,如此一来,不论是什么类型的消息,只需添加到缓存List里就可以,当用户登录上线或消息队列处理数据时,抢夺分布式锁成功后,将缓存的消息返回给用户端即可。原创 2023-12-02 19:10:30 · 259 阅读 · 0 评论 -
Netty分布式聊天室 - 私聊功能实现
如果直接渲染,实际上为了匹配到数据,我们还需要添加对聊天数据添加一个由前端来生成的唯一值(针对同一个用户即可,可以使用userId + 时间戳的形式),sql数据库中不需要保存,只用于ws服务端和客户端的交互即可,这里可以在message中新增一个tempId,然后在ChatMsg实体类中新增一个同类型tempId即可。如果有一个服务器寻到了,并且数据发送成功,这时候其他服务器不用再执行,那么我们就需要用到redis进行服务间通信,如果服务器发现数据不在redis中,则直接跳出操作。原创 2023-12-02 16:18:33 · 558 阅读 · 0 评论 -
Netty分布式聊天室 - 登录功能实现
如此一来,后续handler接收到的请求都是合法请求,不需要验证权限,但指令数据是否合法还需判断,如果不嫌麻烦可以对Message添加一个自检方法,在WebSocketHandler这里运行一次自检也可以,我们后续默认指令数据合法。这里有一个登录时拉取消息的问题:对于离线消息,我们存储在Redis中,如果Redis执行淘汰策略,把数据清空了,我们该如何判断离线消息?这里我的思路是:在数据发送时存储数据,缓存离线消息,如果离线消息被删除,则用户通过漫游查询消息(类似微信太久没登陆会导致消息丢失)原创 2023-12-02 15:28:00 · 206 阅读 · 0 评论 -
Netty与SpringBoot的初步整合
当运行启动类时,我们要异步加载ChatServer.run(),这里使用之前文章提过的初始化接口的方式:CommandLineRunner,重写它的run方法,然后运行ChatServer.run即可,这里将运行方式写为一个接口,方便我们调用接口检查是否执行。以上就是对项目的初步改造,目前已经写完了私聊,剩下的就是业务完善,把思路构思地差不多才来开始做记录,难免会有些细节没有提到,需要了解的同学可以留言或者私信我。右键选择MybatisX-Generator。对于指令处理延用原本的方式,不得不说很巧妙。原创 2023-12-02 15:03:00 · 196 阅读 · 0 评论