【实战】Unity3d实战之Unity3d网络游戏实战篇(12):客户端网络模块

本文介绍了Unity3d客户端在网络模块中的实践,包括消息的异步接收、存储、处理逻辑,以及如何通过监听表和委托管理回调方法。重点讲解了MsgDistribution类的结构和Connection类的消息收发功能,包括线程安全处理及Send方法的重载实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity3d实战之Unity3d网络游戏实战篇(12):客户端网络模块

学习书籍《Unity3d网络游戏实战》 罗培羽著 机械工业出版社
本文是作者在学习过程中遇到的认为值得记录的点,因此引用的代码等资源基本出资罗培羽老师的书籍,如有侵权请联系,必删。

 客户端的网络部分需要处理的数据并没有服务端那么多,要做的事情还是有相似之处的。流程:
 异步Socket接收消息 -> 消息按顺序存入消息列表 -> 依次处理先接收到的消息 -> 根据消息类型执行不同的逻辑。
 注意,客户端给服务端发送数据后,服务端会返回相应的处理结果,我们通过建立监听表来实现对返回消息的监听,当客户端发送数据后,注册相应的监听事件,当接收到对应的返回消息时,调用相应的处理方法。监听表分两类,一种是永久监听,一种是一次性监听。但是,有时候我们接收到返回消息时需要调用多个处理方法,我们可以通过使用委托来实现。
这里写图片描述
这里写图片描述
 1、建立MsgDistribution类管理消息列表和监听表。
 用到的变量有:

public delegate void MsgDelegate(ProtocolBase protoBase);

public List<ProtocolBase> msgList = new List<ProtocolBase>();
public int maxMsgCount = 15;

private Dictionary<string, MsgDelegate> eventDict = new Dictionary<string, MsgDelegate> ();
private Dictionary<string, MsgDelegate> onceDict = new Dictionary<string, MsgDelegate> ();

 其中:
  MsgDelegate:委托类型,它能够引用其他的方法,跟C/C++中的函数指针类似,可以避免使用大量的if-else等语句的问题。但注意,引用的方法必须和MsgDelegate具有相同的参数和返回值类型;
  msgList:消息列表,保存从服务端接收到的消息,先入先出原则;
  maxMsgCount:每帧处理的最大消息数;
  eventDict:永久性监听表,注册之后一直保持监听特定消息,key为监听的协议名,value为回调方法;
  onceDict:一次性监听表,注册之后只监听一次,key为监听的协议名,value为回调方法;。

定义用于添加事件和删除事件的方法:

#region Extra Operation
/// 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值