是这样最近在做一个服务器同步玩家移动位置和转向的demo,服务器用go客户端用unity,使用TCP,数据发送用protobuf。因为之前没接触过golang所以磕磕绊绊遇到了很多坑。在即将完成的时候发现了一个问题就是几个玩家之间的移动数据接收很不流畅。
一开始以为是服务器的问题,因为每个玩家每隔100毫秒就要发送一次自己的位置和旋转信息,怕是服务器处理不过来。后来加了日志之后发现服务器回传同步都没有什么问题。那可能问题就出在客户端。后来发现可能是玩家每100毫秒接收到服务器同步过来所有其他玩家信息处理不过来,因为接收到之后还需要分包,反序列化数据,根据消息头调用具体方法。所以当有多个客户端之后服务器发回来的包肯定也更大。这里我现在再想办法解决。
但是因为对网络编程了解很少,所以想问一下有没有做过类似东西的大神们这种100毫秒发送一次数据是否过于频繁?同步玩家位置的用这种方法是否合适?另外protobuf里的数据只有六个float变量分别是玩家的位置和旋转信息以及一个longint变量是玩家的id号,一次发送这些数据是否过多?
迫切希望能够有大神帮忙解答下,感激不尽。。
更多评论
状态改变的时候发状态
封装基本的动作, 比如移动, 停止, 跳舞等动作
玩家动作改变的时候 服务器广播
比如A玩家进入了一个地图, 服务器向这个地图内的玩家广播A玩家进来了,
B玩家向某个方向移动了, 广播B移动这个动作
不要把每个玩家的数据都广播, 状态改变的时候再通信
同步需要用游戏时间来控制
拙见 轻喷
#1