200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Netty实战 IM即时通讯系统(一)IM系统简介

Netty实战 IM即时通讯系统(一)IM系统简介

时间:2023-02-20 19:01:10

相关推荐

Netty实战 IM即时通讯系统(一)IM系统简介

##

Netty实战 IM即时通讯系统(一)IM系统简介

零、 目录

IM系统简介 Netty 简介Netty 环境配置服务端启动流程实战: 客户端和服务端双向通信数据传输载体ByteBuf介绍客户端与服务端通信协议编解码实现客户端登录实现客户端与服务端收发消息pipeline与channelHandler构建客户端与服务端pipeline拆包粘包理论与解决方案channelHandler的生命周期使用channelHandler的热插拔实现客户端身份校验客户端互聊原理与实现群聊的发起与通知群聊的成员管理(加入与退出,获取成员列表)群聊消息的收发及Netty性能优化心跳与空闲检测总结扩展

一、 IM系统简介

单聊流程 单聊指的是两个用户之间相互聊天。 用户单聊的基本流程 如上图,A 要和 B 聊天,首先 A 和 B 需要与服务器建立连接,然后进行一次登录流程,服务端保存用户标识和 TCP 连接的映射关系A 发消息给 B,首先需要将带有 B 标识的消息数据包发送到服务器,然后服务器从消息数据包中拿到 B 的标识,找到对应的 B 的连接,将消息发送给 B任意一方发消息给对方,如果对方不在线,需要将消息缓存,对方上线之后再发送 我们把客户端与服务端之间相互通信的数据包称为指令数据包,指令数据包分为指令和数据,每一种指令对应客户端或者服务端的一种操作,数据部分对应的是指令处理需要的数据。 单聊的指令

指令图示

指令列表

指令内容 | 客户端 | 服务端

–|

登录请求 | 发送 | 接收

登录响应 | 接收 | 发送

客户端消息 | 发送 | 接收

服务端消息 | 接收 | 发送

登出请求 | 发送 | 接收

登出响应 | 接收 | 发送

群聊流程 群聊指的是一个组内多个用户之间的聊天,一个用户发到群组的消息会被组内任何一个成员接收,下面我们来看一下群聊的基本流程 如上图所示 , 要实现群聊,其实和单聊类似 A,B,C 依然会经历登录流程,服务端保存用户标识对应的 TCP 连接A 发起群聊的时候,将 A,B,C 的标识发送至服务端,服务端拿到之后建立一个群聊 ID,然后把这个 ID 与 A,B,C 的标识绑定群聊里面任意一方在群里聊天的时候,将群聊 ID 发送至服务端,服务端拿到群聊 ID 之后,取出对应的用户标识,遍历用户标识对应的 TCP 连接,就可以将消息发送至每一个群聊成员 群聊指令集

指令图示

指令列表

指令内容 | 客户端 | 服务端--|创建群聊请求 | 发送 | 接收群聊创建成功通知 | 接收 | 发送 加入群聊请求 | 发送 | 接收群聊加入通知 | 接收 | 发送发送群聊消息 | 发送 | 接收接收群聊消息 | 接收 | 发送退出群聊请求 | 发送 | 接收退出群聊通知 | 接收 | 发送

Netty 我们使用Netty 统一的IO读写API以及强大的pipeline 来编写业务处理逻辑 , 在后续的章节 , 我会通过IM这个例子 ,带你了解Netty的一下核心知识点 服务端如何启动客户端如何启动数据载体ByteBuf长连自定义协议如何设计粘包拆包原理及实践如何实现自定义编解码pipeline 与 channelHandler定时发送心跳怎么做如何进行连接空闲检测 客户端使用Netty的程序逻辑结构 首先,客户端会解析控制台指令,比如发送消息或者建立群聊等指令然后,客户端会基于控制台的输入创建一个指令对象,用户告诉服务端具体要干什么事情TCP 通信需要的数据格式为二进制,因此,接下来通过自定义二进制协议将指令对象封装成二进制,这一步称为协议的编码对于收到服务端的数据,首先需要截取出一段完整的二进制数据包(拆包粘包相关的内容后续小节会讲解)将此二进制数据包解析成指令对象,比如收到消息将指令对象宋丹对应的逻辑处理器来处理 客户端使用Netty的程序逻辑结构

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。