问题标签 [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.
networking - TCP 握手延迟
我在 100 Gb/s LAN 上有两台机器,它们通过 TCP 相互通信。
当我从客户端到服务器进行跟踪或 ping 时,即使是大 ping,我也会在不到1 ms的时间内得到答案。
但是,当我在客户端嗅探 TCP 数据包时,我看到从它发送 3 次握手的第一条消息到它从服务器接收到答案的时间之间经过了40 毫秒。
服务器专用于此客户端,不处理其他任何事情。
这合理吗?我希望它会快得多。
javascript - 使用包装闭包模拟 AJAX 延迟
我想包装 Prototype Ajax.Request 以模拟 AJAX 延迟。我的意思是,使用闭包和 Prototype 的 delay() 工具,但显然我的代码有问题
wcf - 如何计算网络速度:“goodput”带宽,还是真正的带宽?
我正在尝试确定多层系统中服务器与各种客户端之间的延迟和带宽。我认为最容易获得的项目是“goodput”或有效的应用层速率,但延迟有点难获得,但更难的是真正的带宽,包括“窗口大小”和其他技术因素。
我正在寻找关于如何从客户端或服务器的角度最准确地计算它的描述......只要我能够在 Azure 上运行服务器。
我愿意(但不限于)使用 IIS 流式传输一系列字节,这是一个基于 TCP 的 WCF 服务,但解决方案需要基于 .NET。
更新
我为这个问题添加了一个赏金,因为那里有很多信息......但似乎很多相互冲突,或者缺少数据,特别是在 .NET 实现中。我最感兴趣的是有 2 个实现 C# 或 Silverlight。
一些网络专家说我需要考虑 TCP 窗口大小的“慢启动”。
mysql - 当数据库位于遥远的数据中心时,Mysql 服务器已在 Rails 中消失
我们在全球有两个数据中心。如果我们在一个数据中心运行 rails 应用程序并指向位于另一个数据中心的数据库。该应用程序抛出
就像每 5-6 个网络请求中的一次。并显示 5000 内部服务器错误
但是如果我们将应用程序和 mysql 数据库都放在同一个数据中心。它运行得很好。这似乎是一些延迟问题。可能需要一些超时或重新连接到数据库。但不确定如何解决。任何帮助表示赞赏。
networking - 空载网络上的典型延迟
我想知道网络上典型的往返时间,以确定它们是否会成为整个应用程序延迟的限制因素。在这里在一个满载的 100Mbps 网络上测量它,我得到 95% 的 ping 低于 500µs,中位数为 400µs。
空载网络上的典型延迟是什么?网络的带宽规格(例如 1Gb、10Gb)如何影响延迟?
latency - 从远程网络内存映射文件或设备块读取是否比从本地 7200rpm HDD 读取更快?
或者更确切地说,远程 RAM 与本地磁盘访问相比如何?如果答案是“视情况而定”,条件是什么?数据访问模式、读写比率、距离等。
最后,如果本地磁盘是 NetApp 文件管理器怎么办?
谢谢。
networking - 游戏中的网络问题
我正在寻找特定于游戏的网络设计和技巧。我知道一些问题,并且我对其中一些问题有一些部分解决方案,但可能还有一些我看不到的问题。我认为对此没有明确的答案,但我会接受我真正喜欢的答案。我可以想到 4 类问题。
信号不好
客户端发送的消息需要一些时间才能到达服务器。服务器不能只处理它们 FCFS,因为这对延迟较高的玩家不公平。对此的部分解决方案是消息上的时间戳,但您需要两件事:
- 能够信任客户的时钟。(我认为这是不可能的。)
- 您可以测量的恒定延迟。你能对可变延迟做些什么?
许多游戏使用 UDP,这意味着消息可能会丢失。在这种情况下,他们会尝试根据他们已有的信息来估计游戏状态。在连接再次工作后,您如何知道估计的状态是否正确?
在 MMO 游戏中,服务器处理大量客户端。分配负载的最佳方式是什么?基于游戏中的位置?将一组客户端绑定到服务器?你能避免通过服务器发送所有内容吗?
球员离开
发生这种情况时,我已经看到了 2 种不同的行为。在大多数 FPS 游戏中,如果主持游戏的玩家(我猜他是服务器)离开其他人无法玩。在大多数 RTS 游戏中,如果任何玩家离开,其他玩家可以在没有他的情况下继续玩。没有专用服务器怎么可能?大家都知道完整的状态吗?他们是否以某种方式转移了服务器的角色?
获取信息
下一个问题可以通过专用服务器解决,但我很好奇它是否可以在没有服务器的情况下完成。在很多游戏中,玩家不应该知道游戏的完整状态。RTS 中的战争迷雾和 FPS 中的墙壁就是很好的例子。但是,他们需要知道一个动作是否有效。(例如,你能从那里射我还是你在地图的另一边。)在这种情况下,客户端需要验证对未知状态的更改。这听起来像是可以通过巧妙地使用密码原语来解决的问题。有任何想法吗?
作弊
在受信任的客户端环境中,上述一些问题很容易发生,但不能假设。是否有适用于例如 80% 普通用户 - 20% 作弊者环境的解决方案?你真的可以制作一个可以工作的反作弊软件(并且不需要像内核模块这样荒谬的东西)吗?
我确实阅读了这个问题和一些答案https://stackoverflow.com/questions/901592/best-game-network-programming-articles-and-books但其他答案链接到不可用/受限内容。这是一个独立于平台/操作系统的问题,但也欢迎针对特定平台/操作系统的解决方案。
sockets - 测量和解释 socket.send 到实际离开盒子的数据包之间的事件
我试图找出从我的 C# 应用程序调用 Socket.Send 到数据包实际离开盒子的总时间。测量它的最佳方法/技术/方法/工具是什么?
我想知道、解释和测量从我的 C# 应用程序的 Socket.Send 或 BeginSend 之间发生的所有事情,直到数据包真正离开盒子。
http - POST 与 GET 方法 - 在网络级别,哪个受延迟影响更大?
HTTP GET 和 POST 请求的网络通信有什么不同吗?
使用 GET,我知道整个请求是一次性发送的。使用 POST,我认为发送了初始请求,然后发送了第二个请求,该请求发送了所有参数。
例如,假设服务器和客户端之间的延迟是 500 毫秒。GET 与 POST 调用的总时间是多少?
multithreading - Winsock 本地环回延迟
我正在使用 tcp 套接字在 Windows XP 上的两个应用程序之间提供进程间通信。我出于各种原因选择了 tcp 套接字。我看到平均往返时间为 2.8 毫秒。这比我预期的要慢得多。分析似乎表明延迟是在一个应用程序调用 send 和另一端的阻塞 recv 返回之间。
我也有应用程序、守护进程和客户端。它们的结构类似于以下伪代码:
守护线程 1(监听新连接):
守护进程 client_socket 线程(监听来自客户端的数据包):
客户端线程 1:
任何想法为什么延迟如此糟糕?我怀疑 Nagel 的算法,但在我的代码中乱扔:
没有帮助。我是否需要在客户端和守护程序套接字上都这样做(我正在这样做)?
我在一台几乎没有负载、没有磁盘活动等的四核机器上。