1、客户端心跳检测与服务端心跳检测
服务端检测到某个客户端迟迟没有心跳过来能够主动关闭通道,让它下线; 客户端检测到某个服务端迟迟没有响应心跳也能重连获取一个新的链接
2、断网自动重连
确保断网后,网络一旦恢复,能第一时间自动从新创建长链接(客户端重连)
3、消息确认
客户端发送消息时携带客户端自己生成的消息id,服务端用这个做个幂等性,完成处理后携带客户端的消息id推送给客户端告知处理结果
ps:所谓幂等性,就是一次和屡次请求一个接口都应该具备一样的后果。为何须要?对每一个接口的调用都会有三种可能的结果:成功,失败和超时。对最后一种的缘由不少多是网络丢包,可能请求没有到达,也有可能返回没有收到。因而在对接口的调用时每每都会有重试机制,但重试机制很容易致使消息的重复发送,从用户层面这每每是不可接受的,所以在接口的设计时,咱们就须要考虑接口的幂等性,确保同一条消息发送一次和十次都不回致使消息的重复到达
4、并发考虑
服务端收到消息后,保存消息的任务推送到redis队列,使用job异步写入聊天信息。
ps:若是一层一层的同步调用下去,全部的调用方须要相同的等待时间,调用方的资源会被大量的浪费。更糟糕的是一旦被调用方出问题,其余调用就会出现多米诺骨牌效应跟着出问题,致使故障蔓延。收到请求当即返回结果,而后再异步执行,不只能够增长系统的吞吐量,最大的好处是让服务之间的解耦更为完全
目前设计阶段,后续出现问题持续更新。。。