obsidian/笔记文件/2.笔记/Protobuf序列化_第二章.md
2025-03-26 00:02:56 +08:00

4.6 KiB
Raw Permalink Blame History

udp客户端对应服务端发回的登录相关网络消息回包处理逻辑是打印log

!Pasted image 20240418160819.png

对应服务端发回的背包相关网络消息回包处理逻辑也是打印log

!Pasted image 20240418160849.png

ClientRecive函数接口是客户端的await异步接收服务端发过来网络消息的逻辑也是调用常规的解序列化DeSerialize接口通过头部的cmd协议标识调用对应登录的 loginHandler 和背包的 bagHandler 处理响应逻辑 即可

!Pasted image 20240418160934.png

客户端的逻辑根节点也是声明一个udp客户端、登录和背包的Handler回包处理逻辑对应服务器ip、单例instance和获取器

!Pasted image 20240418161250.png

客户端Init初始化接口完成各变量的初始化也是通过Task创建ClientRecive的消息接收任务

!Pasted image 20240418161342.png

ReqLogin是客户端请求登录的接口

!Pasted image 20240418161452.png

ReqBag是客户端请求背包数据的接口

!Pasted image 20240418161520.png

客户端对应的Main主函数调用对应逻辑根节点的Init初始化然后while死循环中ReadLine监听输入如果输入"login"就会发送,客户端登录请求; 如果输入"bag"就会发送,提取背包数据请求;

!Pasted image 20240418161555.png

先后调试服务端、客户端对应log正常

!Pasted image 20240418161808.png

!Pasted image 20240418161750.png

客户端,输入,回车

!Pasted image 20240418161822.png

服务端接收到请求→发回包→客户端接收到回包打印log都正常

!Pasted image 20240418161908.png

!Pasted image 20240418161921.png

继续测试背包客户端输入回车log都正常

!Pasted image 20240418161952.png

!Pasted image 20240418162004.png

!Pasted image 20240418162013.png

解析一下Protobuf对应的.proto后缀文件结构 协议包名称自定义LogicProtocol相关的修饰符message协议、required字段

!Pasted image 20240418162214.png

继续也有enum枚举

!Pasted image 20240418162418.png

继续完成剩余的数据包整体构建还有修饰符Optional表示这是可选字段可有可无

!Pasted image 20240418162434.png

参考protobuf的Required,Optional,Repeated限定修饰符即可 对应的run.bat批处理文件所在路径

!Pasted image 20240418164721.png

批处理脚本逻辑会调用soft目录的protogen.exe可执行程序将NetProtocol.proto协议文件解析成脚本逻辑文件 C#相关的输出路径是回到上层目录然后再前往仨文件夹分别对应UDP客户端、UDP服务端、unity客户端的Asset目录对应的文件夹 还有一个是java相关的会输出到java服务器的相关路径

!Pasted image 20240418164701.png

双击运行log显示生成脚本正常

!Pasted image 20240418165120.png

对应生成路径,也正常

!Pasted image 20240418165155.png

!Pasted image 20240418165210.png

服务端对应protobuf的登录请求回调调用的是对应protobuf的逻辑根节点包含的SendMsg发送消息接口

!Pasted image 20240418165335.png

protobuf的逻辑根节点对应的SendMsg发送消息逻辑接口使用的是protobuf内部的Serializer序列化逻辑

!Pasted image 20240418165424.png

!Pasted image 20240418165537.png

服务端protobuf对应的背包请求同理

!Pasted image 20240418165602.png

protobuf逻辑根节点跟常规的基本一致只是更换了Serializer序列化相关机制

!Pasted image 20240418165655.png

!Pasted image 20240418165732.png

修改服务端调用

!Pasted image 20240418165802.png

客户端对应protobuf的脚本同理

!Pasted image 20240418165841.png

修改调用,同理

!Pasted image 20240418165901.png

调试服务端+客户端log正常

!Pasted image 20240418170037.png

!Pasted image 20240418170049.png

打开unity客户端这是挂载的脚本

!Pasted image 20240418170204.png

文件结构,和客户端实例,基本相同

!Pasted image 20240418170234.png

Start开始函数主要修改一下对应的ip即可

!Pasted image 20240418170304.png

Update更新函数输入L是登录请求输入B是背包请求

!Pasted image 20240418170333.png

运行游戏输入L和B回包log打印正常

!Pasted image 20240418170412.png

服务端log也正常

!Pasted image 20240418170431.png