bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

CrazyIM学习笔记五【点对点单聊】

发表于 2021-03-23 | 分类于 Netty

  单聊的业务比较简单,就像微信的聊天功能。其业务流程具体如下:

  1. 当用户A登录成功后,按照单聊的消息格式,发送消息。这里的消息格式为:userId:content。其中userId就是消息接目标用户B的userId;其中content,标识聊天的内容。
  2. 服务器端收到消息后,根据目标userId进行消息的转发,发送到用户B所在的客户端。
  3. 客户端用户B收到用户A发来的消息,在自己的控制台显式出来。

这里服务端的路由转发不是根据sessionId,而是根据userId。其原因是因为用不B可能登录了多个会话(桌面会话、移动端会话、网页端会话),这时发给用户B的聊天消息必须转发到多个会话,所以需要根据userId进行转发。

阅读全文 »
bboyjing's blog

CrazyIM学习笔记四【客户端登录流程】

发表于 2021-03-20 | 分类于 Netty

  这一章节将实现客户端登录的相关逻辑,客户端所涉及的模块大致如下:

  • ClientCommand模块:控制台命令模块,程序是通过控制台来触发的,根据用户输入的命令来调用响应的Command实现类。
  • ProtoBufBuilder模块:主要用来组装ProtoBuf消息。
  • Sender模块:数据包发送模块。
  • Handler:处理器模块,主要是服务端响应处理器。

    阅读全文 »
bboyjing's blog

CrazyIM学习笔记三【服务端登录流程】

发表于 2021-03-20 | 分类于 Netty

  登录的流程,从端到端的角度来说,包括如下环节:

  1. 客户端发送登录数据包。
  2. 服务端进行用户信息验证。
  3. 服务器端创建Session会话。
  4. 服务器端返回登录结果的信息给客户端,包括成功标志、Session ID等。

本章节将实现服务端登录的相关逻辑,其中涉及的主要模块如下:

  • Handler模块:客户端请求的处理
  • Processor模块:以异步的方式完成请求的业务逻辑处理
  • Session模块:管理用户与通道的绑定关系
阅读全文 »
bboyjing's blog

CrazyIM学习笔记二【ProtoBuf协议及编解码器】

发表于 2021-02-20 | 分类于 Netty

  系统的通讯协议采用稍复杂的Head-Content协议,head部分为【2字节魔数】+【2字节版本】+【4字节content长度】。其中, 魔数可用来识别数据包是否符合规范;版本号可用来处理协议版本升级的相关问题。下面通过ProtoBuf消息格式的设计、编码器以及解码器来实现协议的相关内容。

ProtoBuf消息格式的设计

  一般来说网络通信涉及的消息大体可以分为3大新消息类型:

  • 请求消息
  • 应答消息
  • 命令消息

每个消息基本上会包含一个序列号和一个类型定义。序列号用来唯一区分一个消息,类型用来决定消息的处理方式。在chatcommon/proto目录下新建ProtoMsg.proto文件,内容如下:

阅读全文 »
bboyjing's blog

CrazyIM学习笔记一【序】

发表于 2021-02-20 | 分类于 Netty

  最近在看《Netty、Redis、Zookeeper高效并发实战》这本书,其中第九章讲了一个IM系统的开发实践。大致看了下,可能由于篇幅问题,源码的实现没有完全写出来。所以打算一步步把源码整理出来,顺便记录一下学习过程,供道友交流参考。该系统主要基于Netty、SpringBoot等组件,数据传输格式使用的是Protobuf,系统中用到了很多关于Netty的知识点,如果不是很了解的话建议看一下该书的前八章。本章节的主要目的是把项目框架搭建好,下面就开始吧。

搭建项目主体

  搭建常规的基于SpringBoot的Mave项目,建一个空项目就可以了,因为后面具体的功能会使用到子模块。pom文件如下:

阅读全文 »
12…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist