netty(一)从即时聊天系统认识netty

一、简介

  定义:netty是一个异步基于事件驱动的高性能网络通信框架。可以帮助用户快速开发高性能、高稳定的网络通信服务

  优点:

  • 1、设计优雅【封装了JAVA的NIO,使得上手相对简单容易】
  • 2、高性能【大量底层优化,0拷贝,Reactor模型等】
  • 3、社区氛围活跃

二、从一个即时聊天系统来代入netty

单聊流程

  解析:

  • 1、A和B聊天,则A和B先和服务端建立连接并进行登入操作,服务端保存用户标识和TCP连接的映射关系
  • 2、A给B发消息,需要将带有B标识的消息数据包发送到服务端,然后服务端通过B标识找到B的TCP链接,并把消息发送给B。
  • 3、任意一方发送消息给对方,如果对方不在线,则需要将消息缓存,在对方上线后再进行消息补发。

  PS:客户端与服务端之间相互通信的数据包成为指令数据包,内容分为指令数据两部分。每一种指令都对应客户端或者服务端的一种操作,数据部分则是指令处理需要的数据内容。

群聊流程

  解析:

  • 1、A、B、C依然会经历登录流程,服务端保存用户标识对应的TCP连接。
  • 2、A发起群聊时,把A、B、C的标识发送给服务端【例:邀请哪几位小伙伴加入群聊】,服务端拿到标识后建立群ID,并与A、B、C标识绑定
  • 3、群聊中任意一方在群里聊天的时候,将群ID发送至服务端,服务端获取到群ID后,取出对应的用户标识,遍历用户标识对应的TCP连接,就可以将消息发送至每一个群聊成员

三、Netty的程序逻辑结构

客户端

  解析:

  • 1、客户端会解析控制台指令,比如发送消息或者简历群聊等指令。
  • 2、客户端会基于控制台的输入创建一个指令对象,用户告诉服务端具体要干什么事情。
  • 3、TCP通信需要的数据格式为二进制,因此接下来通过自定义二进制协议将指令对象封装成二进制,就是协议编码的过程。
  • 4、对于收到服务端的数据,首先需要截取出一段完整的二进制数据包,其中就涉及到拆包和粘包
  • 5、将二进制数据包解析成指令对象,比如收到消息。
  • 6、将指令对象送到对应的逻辑处理器来处理

服务端

   PS:服务端程序结构与客户端类似,这里就不重复赘述了,可以参考客户端和上面的流程图配合进行理解~

posted @   有梦想的肥宅  阅读(661)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示