一个菜鸡大学牲的爪洼学习笔记(六)

netty框架的使用 websocket

websocket的连接

进入直播间之后,前端发送请求ImConfig 拿到nacos host地址以及token,拼接一个url 例:web://host/token/userId/roomId
传送给后端建立连接,后端会在服务启动类获取im的服务注册ip和暴露端口并存入本地缓存,随后进行握手接入websocket
在这里插入图片描述
并对传来的数据(url)进行分割取出数据进行校验传入下一个handler中
在这里插入图片描述
在loginhandler中则保存相关的channel对象信息并回写客户端,将当前用户im的服务注册ip进行绑定,发送Rocketmq消息给living provider模块。
在这里插入图片描述
living provider模块接受消息之后则会将roomId与appid作为key,userid作为值存入redis中,以此实现当用户进入直播间后,与直播间进行绑定。
退出直播间或掉线则会触发channelInactive方法,与上面也是差不多的流程,最后删除key绑定的userId即可

直播间聊天功能的实现

进入msgHandler中得到前端传来的聊天数据传入doMsgHandler中通过code来判断进入哪一个处理程序中
在这里插入图片描述
进入Biz处理程序然后发送消息给msg模块,由于是1个人发送n个人接受的模式那么就得先去redis内拿到所有该直播间内用户的id
在这里插入图片描述

然后传入下一个方法进入router层batchSendMsg方法中
在这里插入图片描述
批量从redis中取出之前登录时每个用户绑定的ip,并按ip进行分组放入map中,将ip地址放入RpcContext进行保存,将连接同一ip地址的imMsgBody组装到同一个list集合中,然后统一进行发送
在这里插入图片描述
但此时会进入ClusterInvoker中,先取出之前RpcContext中存储的ip与rpc服务的ip进行匹配调用指定机器的方法
在这里插入图片描述
此时又回到了im服务层对消息进行一条一条的通知,并发送ack消息,先把ack消息存入redis中,然后发送延迟消息进行确认并删除redis中的ack消息
在这里插入图片描述在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值