内容简介:我正在为一个游戏引擎开发一个C#Server应用程序,我正在用ActionScript 3编写.我正在使用权威服务器模型来防止作弊并确保公平游戏.到目前为止,一切运作良好:当客户端开始移动时,它会告诉服务器并在本地开始渲染;然后,服务器告诉其他人客户端X已开始移动,其中包含详细信息,以便他们也可以开始渲染.当客户端停止移动时,它会告诉服务器,服务器根据客户端开始移动的时间执行计算,客户端呈现滴答延迟并回复所有人,这样他们就可以使用正确的值进行更新.问题是,当我在服务器计算上使用默认的20ms滴答延迟时,当客
我正在为一个游戏引擎开发一个C#Server应用程序,我正在用ActionScript 3编写.我正在使用权威服务器模型来防止作弊并确保公平游戏.到目前为止,一切运作良好:
当客户端开始移动时,它会告诉服务器并在本地开始渲染;然后,服务器告诉其他人客户端X已开始移动,其中包含详细信息,以便他们也可以开始渲染.当客户端停止移动时,它会告诉服务器,服务器根据客户端开始移动的时间执行计算,客户端呈现滴答延迟并回复所有人,这样他们就可以使用正确的值进行更新.
问题是,当我在服务器计算上使用默认的20ms滴答延迟时,当客户端移动相当长的距离时,当它停止时会有明显的向前倾斜.如果我将延迟略微增加到22ms,在我的本地网络上一切都运行得非常顺利,但在其他地方,倾斜仍然存在.经过一番实验后,我注意到所需的额外延迟几乎与客户端和服务器之间的延迟有关.我甚至把它煮成了一个非常好的公式:延迟= 20(延迟/ 10).
那么,我将如何继续获取某个客户端和服务器之间的延迟(我正在使用异步套接字). CPU的工作量不能太大,因为没有服务器运行缓慢.此外,这真的是最好的方式,还是有更有效/更简单的方法来做到这一点?
很抱歉,这不是直接回答您的问题,但一般来说,您不应过分依赖测量延迟,因为它可能变化很大.不仅如此,你不知道你测量的ping时间是否是对称的,这很重要.如果事实证明,20ms的ping时间实际上是从服务器到客户端的19ms,从客户端到服务器的1ms,则没有必要应用10ms的延迟校正.应用程序术语中的延迟与网络术语中的延迟不同 – 您可能能够ping某台计算机并在20ms内获得响应,但如果您正在联系该计算机上的服务器,该服务器每秒只处理网络输入50次,那么你的回复将被延迟0到20毫秒,这将变化相当不可预测.
这并不是说延迟测量它没有平滑预测的地方,但它不会解决你的问题,只是清理一下.
从表面上看,这里的问题似乎是您在第一条消息中发送了信息,用于从收到最后一条消息之前推断数据.如果所有其他方法保持不变,则第一条消息中给出的移动向量乘以消息之间的时间将为服务器提供客户端大致现在所处的正确结束位置 – (延迟/ 2).但是如果延迟发生变化,则消息之间的时间会增加或缩小.客户可能知道他移动了10个单位,但服务器模拟他移动了9或11个单位,然后被告知将他重新安置回10个单位.
对此的一般解决方案是不假设延迟将保持不变,而是发送定期位置更新,这允许服务器验证并纠正客户端的位置.现在只有2条消息,在第二条消息之后找到并纠正了所有错误.随着更多消息的出现,错误会分布在更多的采样点上,从而实现更平滑,更不可见的校正.
它永远不会是完美的:它只需要在最后一毫秒的运动中出现滞后峰值,服务器的表示就会超调.如果你根据过去的事件预测未来的运动,你无法解决这个问题,因为没有真正的选择来选择正确但迟到或不正确但是及时,因为信息需要时间旅行. (责备爱因斯坦.)
翻译自:https://stackoverflow.com/questions/770978/how-do-i-obtain-the-latency-between-server-and-client-in-c
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- RabbitMQ延迟消息的延迟极限是多少?
- RabbitMQ延迟消息的延迟极限是多少?
- 延迟静态绑定——static
- RabbitMQ实现延迟队列
- mybatis 延迟加载
- mybatis教程--延迟加载详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图形程序开发人员指南
Michael Abrash / 前导工作室 / 机械工业出版社 / 1998 / 128
Michael Abrash's classic Graphics Programming Black Book is a compilation of Michael's previous writings on assembly language and graphics programming (including from his "Graphics Programming" column......一起来看看 《图形程序开发人员指南》 这本书的介绍吧!