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:服务端程序结构与客户端类似,这里就不重复赘述了,可以参考客户端和上面的流程图配合进行理解~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律