##

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

零、 目录

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

一、 IM系统简介

  1. 单聊流程

    1. 单聊指的是两个用户之间相互聊天。 用户单聊的基本流程

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

    2. 指令列表

      指令内容 | 客户端 | 服务端
      –|
      登录请求 | 发送 | 接收
      登录响应 | 接收 | 发送
      客户端消息 | 发送 | 接收
      服务端消息 | 接收 | 发送
      登出请求 | 发送 | 接收
      登出响应 | 接收 | 发送

  3. 群聊流程
    1. 群聊指的是一个组内多个用户之间的聊天,一个用户发到群组的消息会被组内任何一个成员接收,下面我们来看一下群聊的基本流程

      1. 如上图所示 , 要实现群聊,其实和单聊类似

        1. A,B,C 依然会经历登录流程,服务端保存用户标识对应的 TCP 连接
        2. A 发起群聊的时候,将 A,B,C 的标识发送至服务端,服务端拿到之后建立一个群聊 ID,然后把这个 ID 与 A,B,C 的标识绑定
        3. 群聊里面任意一方在群里聊天的时候,将群聊 ID 发送至服务端,服务端拿到群聊 ID 之后,取出对应的用户标识,遍历用户标识对应的 TCP 连接,就可以将消息发送至每一个群聊成员
  4. 群聊指令集
    1. 指令图示

    2. 指令列表

       指令内容 | 客户端 | 服务端--|创建群聊请求 | 发送 | 接收群聊创建成功通知 | 接收 | 发送 加入群聊请求 | 发送 | 接收群聊加入通知 | 接收 | 发送发送群聊消息 | 发送 | 接收接收群聊消息 | 接收 | 发送退出群聊请求 | 发送 | 接收退出群聊通知 | 接收 | 发送
      
  5. Netty
    1. 我们使用Netty 统一的IO读写API以及强大的pipeline 来编写业务处理逻辑 , 在后续的章节 , 我会通过IM这个例子 ,带你了解Netty的一下核心知识点

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

Netty实战 IM即时通讯系统(一)IM系统简介相关推荐

  1. Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline

    Netty实战 IM即时通讯系统(十二)构建客户端与服务端pipeline 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向 ...

  2. Netty实战 IM即时通讯系统(十一)pipeline与channelHandler

    Netty实战 IM即时通讯系统(十一)pipeline与channelHandler 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端 ...

  3. Netty实战 IM即时通讯系统(十)实现客户端和服务端收发消息

    Netty实战 IM即时通讯系统(十)实现客户端和服务端收发消息 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向通信 数据 ...

  4. Netty实战 IM即时通讯系统(九)实现客户端登录

    ## Netty实战 IM即时通讯系统(九)实现客户端登录 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向通信 数据传输载 ...

  5. Netty实战 IM即时通讯系统(八)服务端和客户端通信协议编解码

    Netty实战 IM即时通讯系统(八)服务端和客户端通信协议编解码 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向通信 数 ...

  6. Netty实战 IM即时通讯系统(七)数据传输载体ByteBuf介绍

    ## Netty实战 IM即时通讯系统(七)数据传输载体ByteBuf介绍 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 客户端启动流程 实战: 客户端和服务端双向 ...

  7. Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信

    ## Netty实战 IM即时通讯系统(六)实战: 客户端和服务端双向通信 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载 ...

  8. Netty实战 IM即时通讯系统(五)客户端启动流程

    ## Netty实战 IM即时通讯系统(五)客户端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...

  9. Netty实战 IM即时通讯系统(四)服务端启动流程

    ## Netty实战 IM即时通讯系统(四)服务端启动流程 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteBuf ...

  10. Netty实战 IM即时通讯系统(三)Netty环境配置

    ## Netty实战 IM即时通讯系统(三)Netty环境配置 零. 目录 IM系统简介 Netty 简介 Netty 环境配置 服务端启动流程 实战: 客户端和服务端双向通信 数据传输载体ByteB ...

最新文章

  1. Centos7常用命令
  2. 很遗憾,自然语言理解是AI尚未攻克的领域
  3. 济南职业学院计算机信息管理在哪个校区,计算机学院圆满完成省计算机信息管理专业教学指导方案开发...
  4. Python技术分享:ndarray对象的常用属性
  5. dojo/aspect源码解析
  6. SAP C4C里嵌入SAP Analytics Cloud的案例
  7. Android钢琴滑动代码,android 钢琴界面实现
  8. .Net读取xlsx文件Excel2007
  9. 【codevs2144】砝码称重 2(折半搜索)
  10. 判断用户 小程序_小程序对于用户的作用有哪些
  11. EP100底层封装-LibCreateSourceFile()函数
  12. 希尔伯特变换分析及应用
  13. Deskpins—窗口置顶软件
  14. 中国十大电商网站优势与劣势分析
  15. 扫码枪收银有手续费吗_为何超市“扫码枪”不输密码就可以付款?听收银员说完,不纠结了...
  16. 昆山花桥房都要上万 上海买家占9成“江山”
  17. html+css的音乐网站
  18. 深度:戴尔中国十年之变
  19. TSF(Text Service Framework)简介
  20. 日语五十音 第一课 上

热门文章

  1. mt6762添加gpio按键方法与问题调试
  2. 15-读乐嘉《本色》
  3. 【Python】植物大战僵尸-基于pygame模块-part2
  4. 标准C语言的简单介绍7(预处理)
  5. 商业银行表内表外业务
  6. Excel中如何使用函数NUMBERSTRING
  7. 前台Service发展历史
  8. sinatra源码解读
  9. 微信对话在线图片生成
  10. PTA 7-9 sdut-String-1 识蛟龙号载人深潜,立科技报国志(1)分数 10