一、问题场景还原
在做团队一款德州扑克的项目,玩家登陆游戏进入大厅前需要接收大量数据,包括公告、任务、签到、好友等等。服务器将大量的数据在较短的时间内发送给客户端导致客户端无法处理完,导致尾部的消息数据丢失。
玩家登陆后服务器需要发送的数据如下:
1 /// <summary> 2 /// 玩家数据 3 /// </summary> 4 /// <param name="player"></param> 5 public static void SendPlayerBaseInfo(Player player) 6 { 7 Debug.Log(string.Format("110 获取玩家基本信息,playerId={0}", player.PlayerId)); 8 var pk = PacketSend.Create(Event_PlayerBaseInfo.EventId); 9 PacketSet2(pk, player); 10 App_GateWayConn.Send(player.baseInfo.connId, pk); 11 12 ////好友上线 13 HandleFriend.SendFriendOnline(player); 14 } 15 /// <summary> 16 /// 玩家数据 17 /// </summary> 18 /// <param name="player"></param> 19 public static void SendPalyerInfo1(Player player) 20 { 21 //众筹信息 22 HandleCrowfund.Handle_PlayerLogin(player); 23 24 } 25 /// <summary> 26 /// 玩家数据 27 /// </summary> 28 /// <param name="player"></param> 29 public static void SendPalyerInfo0(Player player) 30 { 31 //公告 32 HandleSys.Handle_SendNotice(player); 33 //任务 34 HandleTask.SendInfo(player); 35 //签到 36 HandleSign.SendInfo(player); 37 //游戏数据 38 SendPlayerComInfo(player); 39 40 #region 场次信息 41 HandleTournament.HandleTournament_List(player); 42 HandleTournament.HandleTournament_SendEnrolledInfo(player); 43 HandleSitFullRoom.Handle_SendList(player); 44 HandleSitFullRoom.Handle_SendSession(player); 45 HandleEliminateRoom.HandleEliminate_SessionList(player); 46 HandleEliminateRoom.HandleEliminate_EnrolledInfo(player); 47 #endregion 48 //好友 49 HandleFriend.Handle_Send(player); 50 51 //邮件 52 HandleMail.SendMails(player); 53 //礼包 54 HandleGift.Handle_Send(player); 55 56 //商品信息 57 HandleShop.Handle_Login(player); 58 }