- 跟闪电侠学Netty:Netty即时聊天实战与底层原理
- 俞超
- 517字
- 2022-05-05 22:12:51
8.1 什么是客户端与服务端的通信协议
无论使用Netty还是使用原始的Socket编程,基于TCP通信的数据包格式均为二进制,协议指的就是客户端与服务端事先商量好的,每一个二进制数据包中的每一段字节分别代表什么含义的规则。一个简单的登录指令如下图所示。
在这个数据包中,第一个字节为1表示这是一个登录指令,接下来是用户名和密码,这两个值以\0分割,客户端发送这段二进制数据包到服务端,服务端就能根据这个协议来取出用户名和密码,执行登录逻辑。在实际的通信协议设计中,我们会考虑更多细节,比这个协议稍微复杂一些。
那么,协议设计好之后,客户端与服务端的通信过程又是怎样的呢?
客户端与服务端的通信如下图所示。
1.客户端把一个Java对象按照通信协议转换成二进制数据包。
2.通过网络,把这段二进制数据包发送到服务端。在数据的传输过程中,由TCP/IP协议负责数据的传输,与应用层无关。
3.服务端接收到数据之后,按照协议取出二进制数据包中的相应字段,包装成Java对象,交给应用逻辑处理。
4.服务端处理完之后,如果需要生成响应给客户端,则按照相同的流程进行。
第1章已经列出了实现一个支持单聊和群聊的IM指令集合,设计协议的目的就是客户端与服务端能够识别这些具体的指令。接下来,我们就看一下如何设计这个通信协议。