云通信 / 游戏 / 社交等热门赛道中的必会项目 本课程使用Netty实现端对端通信,开发一款支持多端同时在线的即时通讯系统,采用私有通讯协议,与主流的SpringBoot完美搭配。学完后你可以掌握大型 IM 项目数据同步的原理,搞懂即时通讯完整开发流程并落地,并打造一款属于自己的即时通讯系统。 适合人群 1-3年开发经验的Java开发者 对网络编程感兴趣的开发者 技术储备 使用过Springboot + Mybatis 了解RabbitMQ 环境参数 JDK 1.8 Netty 4.x Springboot 2.x 目录大纲: 第1章 课程介绍与学习指南2 节 | 12分钟 本章主要对课程内容、课程特色、课程内容安排等做整体介绍,给用户在学习上提出指导性建议。 收起列表 图文: 1-1 课前必读(不读错过一个亿) 视频: 1-2 即时通讯系统-课程导学 (11:44) 试看 第2章 为什么要自研一套即时通讯系统?4 节 | 20分钟 本章节将介绍如何为应用加上即时通讯功能,有哪些途径。分别对开源(开源也有商业版和免费版),付费sdk,自研三种途径做对比,三种方式各有优劣势。学完本章可以对各种即时通讯的解决方案有深刻认识,在项目中遇到即时通讯选择时,可以选择最优解。... 收起列表 视频: 2-1 章节介绍 (00:57) 视频: 2-2 纵多成熟的IM系统,我们仍需要自研 (08:52) 视频: 2-3 如何自研一套即时通讯系统? (07:53) 视频: 2-4 章节总结 (01:49) 第3章 基础数据开发-用户&关系&群组24 节 | 192分钟 本章节开发用户基础模块,通过腾讯云即时通讯官方文档、用户模块的api文档。分析我们的用户服务如何设计。参考腾讯云的设计来实现自己的模块。学完本章节后,可以对即时通讯、社交领域的数据库表设计有清晰的了解,技术是触类旁通的,学完以后对自身db设计能力有很大提升。... 收起列表 视频: 3-1 章节介绍 (01:12) 视频: 3-2 业务系统的基石 - 用户模块业务分析&数据库设计 (04:47) 视频: 3-3 带你看看大型企业级项目使用什么结构管理项目骨架的 (03:18) 视频: 3-4 导入用户资料,删除用户资料,修改用户资料,查询用户资料 (17:34) 视频: 3-5 即时通讯中最有价值的数据 - 关系链模块业务分析&数据库设计 (04:11) 视频: 3-6 导入、添加、更新好友业务功能实现 (33:00) 视频: 3-7 删除好友、所有好友的业务功能实现 (07:14) 视频: 3-8 拉取指定好友信息&拉取所有好友信息业务功能实现 (03:32) 视频: 3-9 校验好友关系其实比你想象中的复杂 (24:16) 视频: 3-10 添加、删除、校验黑名单业务功能实现 (01:39) 视频: 3-11 获取所有好友申请列表&好友申请列表已读&审批好友申请业务功能实现 (18:20) 视频: 3-12 好友分组(类似微信的好友标签)业务介绍&DB设计 (01:59) 视频: 3-13 好友分组创建、添加&删除成员&好友分组删除业务功能实现 (04:17) 视频: 3-14 即时通讯最复杂的模块 - 群组模块业务分析&数据库设计 (07:40) 视频: 3-15 导入群、群成员 (19:59) 视频: 3-16 创建群组、修改群信息&获取群信息业务功能实现 (17:10) 视频: 3-17 获取用户加入的群列表业务功能实现 (07:54) 视频: 3-18 解散群组、转让群主业务功能实现 (01:44) 视频: 3-19 拉人入群成员、移除群聊&退出群聊业务功能实现 (03:09) 视频: 3-20 获取群成员信息&修改群成员信息接口业务功能实现 (02:26) 视频: 3-21 禁言群、禁言群成员业务功能实现 (02:33) 图文: 3-22 即时通讯为什么难? 图文: 3-23 作业:想实现和腾讯云类似的拓展资料,数据库要如何设计? 视频: 3-24 章节总结 (03:45) 第4章 BIO,NIO&Netty入门9 节 | 41分钟 本章节介绍BIO和NIO,通过代码的方式演示两者的线程模型,做出对比。通过Netty官网和开源项目中使用Netty的情况分别进行介绍。根据官方文档的案例上手写Netty程序。学完本章节后,可以掌握NIO和BIO概念,可以对Netty程序有初步的认识,可以实现简单的服务端与客户端的交互程序。... 收起列表 视频: 4-1 章节介绍 (01:44) 视频: 4-2 BIO线程模型详解 - 彻底搞懂BIO如何工作 (08:23) 视频: 4-3 NIO线程模型详解 - 彻底搞懂NIO如何工作 (11:26) 视频: 4-4 BIO和NIO总结 (03:30) 视频: 4-5 详解Netty (03:51) 视频: 4-6 Nett初体验-上手写第一个Netty程序 (10:02) 图文: 4-7 NIO与BIO详解 图文: 4-8 作业:使用Netty实现分数录入返回是否及格 视频: 4-9 章节总结 (01:14) 第5章 Netty企业开发必须掌握的技能13 节 | 92分钟 本章节介绍Netty的进阶功能,包括:Netty编解码、Netty粘包拆包、Netty心跳机制,介绍Netty私有协议。最后会通过python作为客户端连接我们的Netty服务,演示私有协议及本阶段开发。学完本章节后可以掌握企业开发中Netty的高级特性,应对企业开发需求。... 收起列表 视频: 5-1 章节介绍 (00:59) 视频: 5-2 使用Netty实现聊天室 (08:11) 视频: 5-3 窥探编解码器 - 初识Netty编解码 (08:08) 视频: 5-4 Netty底层数据流转的核心 - pipeline机制详解 (06:56) 视频: 5-5 传输层协议TCP留给我们的难题-Netty解决半包、粘包方案(一) (10:48) 视频: 5-6 传输层协议TCP留给我们的难题-使用私有协议解决半包、粘包(二) (10:18) 试看 视频: 5-7 ByteBuf核心API讲解 (08:48) 视频: 5-8 IdleStateHandler心跳机制源码详解-揭开主流注册中心心跳机制实现原理 (12:07) 视频: 5-9 Netty的源码解析-掌握Netty核心功能的实现 (11:16) 视频: 5-10 使用Netty实现文件上传 (12:16) 图文: 5-11 Nett服务端启动流程源码详解 图文: 5-12 作业:使用Netty实现简单的HTTP服务器 视频: 5-13 章节总结 (01:30) 第6章 IM开发核心 之构建TCP网关(上)7 节 | 49分钟 本章节主要开发TCP网关服务,网关服务开发采用轻量级,包括Socket、Websocket。yml配置文件启动,开发IM私有协议。学完本章节后可以使Netty实现自己的私有协议。 收起列表 视频: 6-1 章节介绍 (00:35) 视频: 6-2 正式开始编写IM主程序ServerBootstrap (05:54) 视频: 6-3 WebSocketServerProtocolHandler-给我们的程序添加webSocket支持 (02:50) 视频: 6-4 Snakeyaml解析配置文件 - 动态配置tcp程序 (12:35) 视频: 6-5 大白话讲通信协议 - 详解主流通信协议 (06:52) 试看 视频: 6-6 私有协议编解码-设计篇 (05:52) 视频: 6-7 私有协议编解码-实现篇 (14:00) 第7章 IM开发核心之构建TCP网关(下)17 节 | 163分钟 本章节主要开发IM业务,包括多端登录,心跳机制、消息收发、服务注册。通过RabbitMQ与业务服务交互。本章使用的中间件较多,如Redis,Zookeeper,RabbitMQ。学完本章节后可以快速上手Zookeeper,RabbitMQ,掌握市面上的APP踢人机制如何实现。学会如何使用私有消息进行通信。学懂主流负载均衡策略。... 收起列表 视频: 7-1 章节介绍 (03:37) 视频: 7-2 登录消息 - 保存用户NioSocketChannel为channel设置自定义属性 (09:56) 视频: 7-3 分布式缓存中间件 - Redisson快速入门操作数据&发布订阅 (09:46) 视频: 7-4 用户登录网关层 - 保存用户Session (12:46) 视频: 7-5 用户退出网关层 - 离线删除用户Session (09:28) 视频: 7-6 服务端心跳检测 - IdleStateHandler (13:57) 视频: 7-7 RabbitMQ的安装、发布订阅、路由模式详解 (11:20) 视频: 7-8 TCP接入RabbitMQ,打通和逻辑层交互 (14:38) 视频: 7-9 分布式TCP服务注册中心的技术选型 (06:38) 视频: 7-10 TCP服务注册 - Zookeeper注册TCP服务 (12:39) 视频: 7-11 服务改造 - TCP服务分布式改造 (13:40) 视频: 7-12 即时通讯系统支持多端登录模式-应对多端登录的场景(一) (08:16) 视频: 7-13 即时通讯系统支持多端登录模式-应对多端登录的场景(二) (10:05) 视频: 7-14 即时通讯系统如何支持多端登录模式-应对多端登录的场景(三) (23:08) 图文: 7-15 拓展:详解Zookeeper 图文: 7-16 作业:利用这两章知识来实现一个简易版的登录+单聊即时通讯系统 视频: 7-17 章节总结 (02:39) 第8章 打通业务服务器与IM服务器&多端同步24 节 | 163分钟 本章节开头对用户,好友,群组的变更和IM系统进行联动,介绍IM服务回调机制,通过腾讯云文档详细介绍需要哪些回调并实现,回调事件是IM系统保证拓展性的重中之重。本章节实现事件通知,将用户操作同步给自己的同步端,目前主流应用都是支持多端登录的,在这种场景下多端数据同步尤为重要。还会补充接口加密。学完本章节可以... 收起列表 视频: 8-1 章节介绍 (02:19) 视频: 8-2 负载均衡策略-随机模式 (13:24) 视频: 8-3 负载均衡策略-轮训模式 (02:58) 视频: 8-4 负载均衡策略-一致性hash方式(TreeMap实现) (15:36) 视频: 8-5 配置文件配置负载均衡策略 (06:42) 视频: 8-6 回调机制介绍-业务系统和im系统同步数据 (02:50) 视频: 8-7 使用Apache-HttpClient封装http请求工具类和回调方法 (06:59) 视频: 8-8 编写用户资料变更回调 (03:00) 视频: 8-9 编写好友模块回调 (08:43) 视频: 8-10 编写群组模块回调 (10:07) 视频: 8-11 启动一个新的应用服务验证回调机制 (02:44) 视频: 8-12 tcp通知机制介绍-多端数据同步 (04:02) 视频: 8-13 封装查询用户Session工具类 (07:19) 视频: 8-14 封装MessageProducer给用户发送消息 (13:41) 视频: 8-15 编写用户资料变更通知 (06:30) 视频: 8-16 编写好友模块TCP通知 (10:06) 视频: 8-17 封装GroupMessageProducer给群组用户发送消息 (04:43) 视频: 8-18 编写群组模块TCP通知 (07:47) 视频: 8-19 TCP服务处理逻辑层投递的MQ消息 (08:41) 视频: 8-20 接口调用鉴权加密-加解密算法HMAC-SHA256演示 (03:00) 视频: 8-21 接口调用鉴权加密-统一入口拦截器加密校验用户请求 (20:55) 图文: 8-22 拓展:RabbitMQ简介 图文: 8-23 根据一致性hash自己实现一个自定义负载均衡策略 视频: 8-24 章节总结 (00:34) 第9章 消息业务的流程之打通消息收发核心14 节 | 106分钟 本章节开始开发IM消息服务,构建单聊/群聊消息系统,包括消息分发,消息回包,消息存储。实现基础版本打通流程并演示。后面章节会介绍如何高性能的保证消息有序性、一致性做到消息不丢不漏不串。学完本章节可以掌握消息收发的主流程,分布式自增ID生成技术选型,能够准确定位在工作中遇到读扩散or写扩散时选择最优方案。... 收起列表 视频: 9-1 章节介绍 (00:57) 视频: 9-2 重中之重 - 消息收发核心流程梳理 (03:17) 视频: 9-3 单聊消息分发逻辑-RabbitMQ连接tcp层和网关层 (08:56) 视频: 9-4 单聊消息分发逻辑-发送消息前置校验 (16:17) 视频: 9-5 单聊消息分发逻辑-消息分发主流程 (19:25) 视频: 9-6 详细分析群聊业务 (01:03) 视频: 9-7 发送群聊消息前置校验 (06:32) 视频: 9-8 群聊消息分发逻辑是怎样的? (13:09) 视频: 9-9 即时通讯聊天记录存储结构&单聊群聊读扩散or写扩散选型 (08:15) 视频: 9-10 IM消息ID专题 - 分布式自增id解决方案介绍 (01:45) 视频: 9-11 如何将单聊消息持久化到DB上? (13:21) 视频: 9-12 如何将群聊消息持久化到DB上? (04:09) 视频: 9-13 手把手带你编写发送单聊&群聊消息的接口 (06:57) 视频: 9-14 章节总结 (00:59) 第10章 消息业务的核心之消息可达性、一致性、幂等性、实时性 23 节 | 215分钟 本章节会开始着手优化单聊和群聊,补充撤回功能,优化点包括如何保证消息不乱序,消息不丢失,提升消息处理效率,存储离线消息,解决消息重复发送等问题。该章节还会讲解TCP是如何保证消息不丢不漏不串。学完本章节可以掌握即时通讯系统的核心-如何保证消息可达性、一致性、有序性。... 收起列表 视频: 10-1 章节介绍 (01:52) 视频: 10-2 消息实时性 - 利用多线程解决消息串行问题,提升处理效率 (06:01) 视频: 10-3 消息实时性- 校验逻辑前置由tcp通过feign接口提前校验(一) (15:26) 视频: 10-4 消息实时性- 校验逻辑前置由tcp通过feign接口提前校验(二) (03:05) 视频: 10-5 消息实时性- 利用mq异步持久化消息(一) (07:13) 视频: 10-6 消息实时性- 利用mq异步持久化消息(二) (12:38) 视频: 10-7 用了tcp就不会丢包,丢消息了吗? (09:50) 视频: 10-8 单人消息可靠性- 双重ack保证上下行消息可靠(一) (06:11) 视频: 10-9 单人消息可靠性- 双重ack保证上下行消息可靠(二) (15:21) 视频: 10-10 (9分22喷麦)单人消息有序性 - 消息并行可能导致消息乱序,如何保证客户端消息有序性 (12:18) 视频: 10-11 消息幂等性 - 保证消息不“重复”(一) (07:49) 视频: 10-12 消息幂等性 - 保证消息不“重复”(二) (11:43) 视频: 10-13 单聊优化总结 (04:39) 视频: 10-14 群聊消息实时性 - 消息并行,持久化解耦,校验前置 (11:33) 视频: 10-15 群聊消息有序性 - 消息并行可能导致消息乱序,如何保证客户端消息有序性 (02:35) 视频: 10-16 群聊消息消息幂等性 - 保证消息不“重复” (04:59) 视频: 10-17 详解消息已读的实现方案 (05:14) 视频: 10-18 构建聊天会话 - 消息已读功能实现(一) (13:34) 视频: 10-19 构建聊天会话 - 消息已读功能实现(二) (16:27) 视频: 10-20 构建聊天会话 - 会话置顶,删除会话接口 (15:12) 视频: 10-21 离线消息 - 离线消息设计与实现(一) (06:10) 视频: 10-22 离线消息 - 离线消息设计与实现(二) (23:32) 视频: 10-23 章节总结 (01:20) 第11章 揭秘QQ、微信数据同步的演进 14 节 | 120分钟 本章节会着手资料同步的优化,让全量同步的操作改为增量同步。并使用APP端演示优化前后差距。学完本章节可以了解微信和QQ背后数据同步的思路和过程,可以上手优化自己系统的数据同步问题。 收起列表 视频: 11-1 剖析qq和微信背后数据同步的完整过程 (11:48) 视频: 11-2 关系链模块问题修复 (03:39) 视频: 11-3 如何将关系链数据全量拉取改为增量拉取?(一) (15:00) 视频: 11-4 如何将关系链数据全量拉取改为增量拉取?(二) (16:56) 视频: 11-5 如何将会话数据全量拉取改为增量拉取? (04:29) 视频: 11-6 如何将群组数据全量拉取改为增量拉取? (05:05) 视频: 11-7 手把手带你实现增量同步接口(一) (05:52) 视频: 11-8 手把手带你实现增量同步接口(二) (09:02) 视频: 11-9 手把手带你实现增量同步接口(三) (13:41) 视频: 11-10 手把手带你编写获取用户sequence接口 (06:27) 视频: 11-11 如何实现增量拉取离线消息 (12:11) 视频: 11-12 客户端数据库sqlite介绍 (04:46) 视频: 11-13 sqlite案例-uniapp-nview模式开发原生客户端演示sqlite数据库 (06:48) 视频: 11-14 章节总结 (04:07) 第12章 打造QQ在线状态功能之为你的应用增添色彩内容更新中 本章节会讲解即时通讯中在线状态的开发,由于手机在线/离线的频率要远大于发消息,当APP切到后台,对于服务端来说也属于离线状态,而且每次在线/离线触达的用户数要比一般的群组大很多,群内如果有500个用户那么一个用户下线了,其他群成员如何感知?设计的不合理,可能系统90%的资源都会消耗在在线状态功能。本章节将揭晓... 第13章 IM拓展之IM能做的事还有很多内容更新中 本章节将会介绍如何利用IM实现一些市面上应用常见的功能。学完本章节后可以掌握常见应用场景的解决方案。 第14章 课程总结内容更新中 本章主要对课程整体内容进行概括,带领大家梳理课程中的重、难点。 来源: 某课网-Netty+SpringBoot 开发即时通讯系统 |