接收数据
在之前的客户端程序中每帧都只处理一条信息,如果是60FPS,那么每秒只能处理60条信息,
每次Update处理多条数据
Unity每一帧执行一次Update,一般每秒会执行30到60帧,也就是说第3章的网络模块每秒最多只能处理60条消息。如果游戏场景比较复杂,会增大渲染时间,说不定每秒只能处理30条消息。对于某些实时性要求高的游戏,客户端与服务端之间的通信频率可能很高,超过网络模块的处理能力。本章的程序会给NetManager定义只读变量MAX_MESSAGE_FIRE,指示每一帧处理多少条消息,如图6-22所示。
— 引用自 《Unity网络开发实战》罗培羽
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| private static int MAX_MESSAGE_FIRE = 30;
public static void Update() { heartMessageTimer += Time.deltaTime;
MsgUpdate();
if (heartMessageTimer == heartMessageIntervalTime) { SendHeartMessage(); heartMessageTimer = 0; } }
public static void MsgUpdate() { if (reciveMessageQueue.Count == 0) { return; }
for (int i = 0; i < MAX_MESSAGE_FIRE; i++) { BaseMessage msgBase = null; lock (reciveMessageQueue) { if (reciveMessageQueue.Count > 0) { msgBase = reciveMessageQueue.Dequeue(); } }
if (msgBase != null) { listeners[msgBase.GetMessageID()]?.Invoke(msgBase); } else { break; } } }
|