即使通讯技术要点

服务器端

  1. 启动将自己的节点注册到zookeeper上
  2. 开启心跳
  3. 用户登录将用户ID和channel,用户ID和msg存入redis中

客户端

登录login,根据用户名和ID获取路由服务中的IMserver,并且将IMserver保存内存中
将发送的消息分批保存到文件中

网关设计

  1. netty实现的一个网关,netty非常适合做大量长连接网关。

漫游消息

“消息漫游”是指一个用户在任何端,都可以拉取到历史消息,关键点是:
(1) 所有消息存储在云端;
(2) 每个端本地存储last_msg_id,在登录时可以到云端同步历史消息;
(3) 云端存储所有消息成本较高,一般会对历史消息时间(或者条数)进行限制;

多点登录

“多点登录”是指多个端同时登录一个帐号,同时收发消息,关键点是:
(1) 需要在服务端存储同一个用户多个端的状态与登陆点;
(2) 发出消息时,要对发送方的多端与接收端的多端,都进行消息投递;

离线消息

可参考https://mp.weixin.qq.com/s/iKRTqY46CD0RGoSkrrYefg
(1) 对于同一个用户B,一次性拉取所有用户发给ta的离线消息,再在客户端本地进行发送方分析,相比按照发送方一个个进行消息拉取,能大大减少服务器交互次数;
(2) 按需拉取,是无线端的常见优化;
(3) 分页拉取,是一个请求次数与包大小的折衷;
(4) 应用层的ACK,应用层的去重,才能保证离线消息的不丢不重;
(5) 下一页的拉取,同时作为上一页的ACK,能够极大减少与服务器的交互次数;

群消息

(1)不管是群在线消息,还是群离线消息,应用层的ACK是可达性的保障;
(2)群消息只存一份,不用为每个用户存储离线群msg_id,只需存储一个最近ack的群消息id/time;
(3)为了减少消息风暴,可以批量ACK;
(4)如果收到重复消息,需要msg_id去重,让用户无感知;
(5)离线消息过多,可以分页拉取(按需拉取)优化;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值