游戏服务器应如何接收具有定义滴答速率的udp数据包?

jjm*_*mcc 6 architecture networking udp game-engine

我目前有一个具有可自定义滴答率的游戏服务器,但是对于这个例子,我们建议服务器每秒只能打一次或1hz.我想知道如果客户端发送速率比服务器快,那么处理传入数据包的最佳方法是什么,因为我的当前设置似乎不起作用.

在我的tick函数中,我的udp阻塞接收超时,并且它有效,但是如果客户端滴答率高于服务器,则不接收所有数据包; 只有当前正在阅读的那个.所以基本上服务器丢失了客户端发送的数据包.下图显示了我的问题.

在此输入图像描述

所以我的问题是,这是如何正确完成的?是否有一个单独的线程,其中数据包被不断读取,排队,然后在服务器滴答或处理更好的方式时处理队列?


图片来自视频https://www.youtube.com/watch?v=KA43TocEAWs&t=7s,但演示了我正在解释的内容 在此输入图像描述

ldr*_*rrp 0

您的服务器可能必须有一个线程每 5 秒滴答一次,就像客户端接收所有数据包一样。在此期间未收到的任何内容都将被丢弃,因为服务器没有侦听它。然后,您可以在 5 个周期后将数据作为一个块从线程传递到服务器。不过,更可靠的选择是将服务器设置为 5hz,就像客户端一样,并对来自客户端的每个数据包进行线程处理,这样就不会锁定主线程。

例如,如果客户端更新速率为 20,服务器节拍速率为 64,则客户端可能会在 20 个节拍服务器上进行游戏。