基于客户端服务器的多人游戏的最佳更新频率

时间:2010-10-18 14:47:48

标签: c++ network-programming

我正在用c ++制作多人游戏:

客户只需从用户处获取命令,计算其玩家的新位置并将其传达给服务器。服务器接受来自所有客户端的这种位置更新,并且每个客户端都广播相同的位置更新。在这种情况下,哪些参数应该确定连续更新之间的时间间隔(我不想要太多更新,因此阻塞了n / w)。我在想,客户端中的最大ping应该是贡献参数之一。

其次,我如何确定客户端的ping /延迟?此论坛上的其他主题建议使用“原始套接字”或使用系统的ping命令并从文件中收集输出..它们是指使用system('ping "client ip add" > file')之类的东西,还是分叉和执行ping命令。

3 个答案:

答案 0 :(得分:4)

这个答案取决于你所谈论的多人游戏类型。听起来你在谈论一个mmo型游戏。 如果是这种情况那么使用“短暂信道”是有意义的,这基本上意味着客户端可以每秒生成多个移动数据包,但只有最近的移动数据包被发送到服务器。如果您使用这样的技术,那么您应该根据玩家在游戏中移动的速率来确定更新率。通过这样做,您可以确保玩家不会穿过墙壁或过快地通过触发器。

你的第二个问题我会使用boost :: asio设置一个服务,你的客户可以通过发送一个简单的数据包来“ping”,然后服务会将一条消息发送回客户端,你可以确定它花费的时间获取包返回。

答案 1 :(得分:0)

如果你最终要做原始数据包的东西,你也可以推出自己的ICMP数据包;结构很简单(http://en.wikipedia.org/wiki/Ping)。

答案 2 :(得分:0)

enet库为您完成了很多网络工作。它也计算延迟。