可能有人不知道 Netty 是什么,这里简单介绍下:
Netty 是一个 Java 开源框架。Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

也就是说,Netty 是一个基于 NIO 的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。
Netty 相当简化和流线化了网络应用的编程开发过程,例如,TCP 和 UDP 的 Socket 服务开发。
通信协议
在上一章中,我们实现了客户端和服务端的连接功能。而本小节,我们要让它们两能够说上话,即进行数据的读写。
在日常项目的开发中,前端和后端之间采用 HTTP 作为通信协议,使用文本内容进行交互,数据格式一般是 JSON。但是在 TCP 的世界里,我们需要自己基于二进制构建,构建客户端和服务端的通信协议。
我们以客户端向服务端发送消息来举个例子,假设客户端要发送一个登录请求。
对应的类如下:
public class AuthRequest {/** 用户名 **/ private String username; /** 密码 **/ private String password;}
显然:我们无法将一个 Java 对象直接丢到 TCP Socket 当中,而是需要将其转换成 byte 字节数组,才能写入到 TCP Socket 中去。即,需要将消息对象通过序列化,转换成 byte 字节数组。
同时:在服务端收到 byte 字节数组时,需要将其又转换成 Java 对象,即反序列化。不然,服务端对着一串 byte 字节处理个毛线?!
友情提示:服务端向客户端发消息,也是一样的过程哈!
序列化

本文介绍了如何利用Netty开发TCP即时通讯聊天软件,包括Netty的基础概念、通信协议的设计(如序列化使用JSON)、以及如何处理TCP粘包和拆包问题。示例代码展示了Invocation类作为消息体,包含消息类型和内容,使用FastJSON进行序列化和反序列化。还提到了粘包和拆包的解决方案,如在消息头部记录长度以便正确解析。
最低0.47元/天 解锁文章
2776

被折叠的 条评论
为什么被折叠?



