问题标签 [latency]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# 套接字异常延迟
我正在使用 C# 和 XNA 开发一个小型在线多人乒乓球游戏。
我使用套接字在我的个人 LAN 上的两台计算机之间传输数据。它工作正常。
问题在于速度:传输速度很慢。
当我 ping 第二台计算机时,它显示 2 毫秒的延迟。我在我的代码中设置了一个小计时器,它显示大约 200 毫秒的延迟。即使服务器和客户端在同一台计算机上(使用 127.0.0.1),延迟仍然在 15 毫秒左右。我认为这很慢。
这是我的代码的一些片段:
在 ClientAccepted 中,我设置了一个 NetworkStream、一个 StreamReader 和一个 StreamWriter。当我想更新玩家的位置时,这就是我发送消息的方式:
EndUpdate 唯一要做的就是调用 EndWrite。这就是我接收数据的方式:
它不会阻止我的游戏,因为它在第二个线程上。
这些是我尝试过的东西: - 使用 IP 而不是 TCP - 使用二进制消息而不是文本 - 使用 IPv6 而不是 IPv4 没有任何帮助。
关于如何改善延迟的任何想法?
谢谢
performance - 简单的带宽/延迟测试来估计用户体验
我编写基于 Web 的应用程序。性能显然是一个关键因素。虽然数据库加载和页面呈现时间是我可以控制的,但用户的互联网连接却不是。
我正在寻找的是一种指示用户拥有何种连接的方法。类似于网站角落的交通信号灯的东西,向用户显示他们与网站的连接类型,从而表明他们应该期望什么样的感知性能。例如,也许该应用程序看起来很慢,因为您公司中的其他人都在午餐时间浏览 Facebook。
我最初的想法是,这可以通过在每个页面加载时运行的一些 javascript 来实现。
理想情况下,代码是非常“可删除”的,不需要重大代码或基础架构更改即可实现。
c++ - 在 C++ 中从主机获取延迟
使用 C++,我想使用命令/类来获取 ping 主机以在我的程序中使用的延迟时间。我尝试使用 ping 命令,但没有简单的方法来收集时间,因为它包含在其他统计信息中。我希望有一个更简单的方法。
javascript - 如何通过浏览器确定远程服务器的延迟
我运行了几个游戏隧道服务器,并希望有一个页面,客户端可以在其中对所有服务器运行 ping 并找出响应速度最快的服务器。据我所知,在 JavaScript 中似乎没有合适的方法来执行此操作,但我在想,是否有人知道在 Flash 或其他一些客户端浏览器技术中执行此操作的方法?
database - 数据库网络延迟
我目前正在开发一个 n 层系统并与一些数据库性能问题作斗争。我们一直在研究的一个领域是数据库服务器和应用程序服务器之间的延迟。在我们的测试环境中,两个盒子之间的平均 ping 时间在 0.2 毫秒左右,但在客户端站点上,它在 8.2 毫秒左右。这是我们应该担心的事情吗?
对于您的平均系统,你们认为合理的延迟是多少,您将如何测试/测量延迟?
卡尔
tcp - 通过互联网同步时钟
我正在使用我自己的协议通过互联网在两台专用计算机之间发送实时关键数据。
当然,存在延迟。
对于调试和优化,我喜欢让两台计算机使用相同的时基。即,我需要知道他们时钟的时差,以便更好地判断延迟。
当然,相对论之类的东西并不能真正让我完美地同步它们,但我喜欢尽可能接近。
仅依靠 NTP 似乎还不够好 - 根据我的经验,时钟可能会延迟半秒(澄清:到目前为止,我依赖于 Apple 提供的默认时钟)。
我需要至少 1/10 秒范围内的精度。两台计算机不会相距太远,ICMP ping 时间通常小于 100 毫秒。
任何建议如何做到这一点?
(目前,所涉及的机器运行 OS X,所以如果您知道专门为它们提供的解决方案,那将是一个开始)
java - 在 Java 中配置套接字以使用小数据包
我正在处理通过非常慢的网络连接路由给我的时间紧迫的消息。我正在使用 Java TCP/IP 套接字连接到原始服务器(我无法控制)。数据的长度不同,但通常约为 5000 字节,因此最终会分成大约 1400 字节的多个数据包。
在我的 Java 客户端代码中有什么方法可以控制用于向我发送数据的数据包的大小?我想尝试显式地使用较小的数据包大小,例如 500 字节数据包,这将减少我接收消息第一个字节所需的时间,但(可能)会增加标头开销。
c# - 如何以编程方式处理 telnet 连接延迟?
我利用 TcpClient 类来实现 telnet 连接。我不知道的是如何确定响应的结束。似乎一旦 DataAvailable 属性为真,我从 Stream 中读取数据,然后 DataAvailable 临时设置为 false,而缓冲区正在填充另一块数据,但我认为已全部读取并消失。如何确保已阅读所有回复?
您可能会建议我如何更改下面的代码片段以使其正常工作。当我单步执行代码时它可以正常工作,因为有足够的时间来检索整个响应。感谢你的帮助。
http - 如何使用 IIS 在 HTTP 上传输多人游戏数据以最小化延迟?
我想创建一个基于浏览器的网络游戏。为了确保它可以被尽可能多的人使用,我想将所有流量嵌入到标准 HTTP 包中。
假设我使用 IIS 作为后端,我应该如何编写代码以最大限度地减少延迟?
从使用内存中的共享状态的某种 ASP 应用程序(可能是 ASP.NET MVC)开始是否合理?还是我应该从一开始就计划编写自己的某种 IIS 插件?还是我应该放弃 IIS 并改为编写自定义服务器?
从每个客户端重复查询开始是否合理,比如每秒十次,或者我应该以某种方式使数据更像流(如果是这样的话)?
c# - 如何在 C# 中获取服务器和客户端之间的延迟?
我正在为我用 ActionScript 3 编写的游戏引擎开发 C# 服务器应用程序。我使用权威服务器模型来防止作弊并确保公平游戏。到目前为止,一切正常:
当客户端开始移动时,它会告诉服务器并开始在本地渲染;然后,服务器告诉其他人客户端 X 已经开始移动,其中包含详细信息,以便他们也可以开始渲染。当客户端停止移动时,它会告诉服务器,服务器根据客户端开始移动的时间执行计算,客户端渲染滴答延迟并回复所有人,以便他们可以使用正确的值进行更新。
问题是,当我在服务器计算中使用默认的 20 毫秒滴答延迟时,当客户端移动相当长的距离时,它停止时会明显向前倾斜。如果我将延迟稍微增加到 22 毫秒,在我的本地网络上,一切都运行得非常顺利,但在其他位置,倾斜仍然存在。在进行了一些实验之后,我注意到所需的额外延迟与客户端和服务器之间的延迟密切相关。我什至把它归结为一个很好用的公式:延迟 = 20 + (延迟 / 10)。
那么,我将如何继续获取某个客户端和服务器之间的延迟(我正在使用异步套接字)。CPU 工作量不能太多,以免服务器运行缓慢。另外,这真的是最好的方法,还是有更有效/更简单的方法来做到这一点?