- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
当 HTTP 一次又一次为要通过网络传输的每个数据创建连接时, WEB SOCKETS 是静态的,并且连接最初将建立一次并将一直保持到传输完成...但是如果网络套接字是静态的,那么为什么每个数据包的延迟都不同。
我创建的latency test app向我显示了不同的时间滞后..那么,Web套接字是静态连接的优点是什么?或者这是Web套接字中的常见问题?
我是否需要创建一个缓冲区来控制数据流,因为中的数据传输是连续的?
连续数据传输时,延迟会增加吗?
最佳答案
与静态打开的Web套接字建立新连接没有开销(因为该连接已经打开并已建立),但是当您在世界各地进行请求时,网络连接会花费一些时间,因此当您进行网络连接时会出现延迟正在与世界各地的服务器通信。
网络就是这样工作的。
您会从自己局域网上的服务器获得几乎立即的响应,并且该服务器越远(就网络拓扑而言),每个数据包经过的路由器越多,则总延迟就越大。正如您在与该主题相关的先前问题中所见证的那样,当您从位置到服务器位置执行tracert
时,您会看到每个数据包都必须经过许多不同的跃点。这些跃点中的每一个跃点的时间都加起来,并且繁忙的路由器如果没有立即处理您的数据包,也可能各自增加一个小的延迟。
从发送数据包到获得响应之间的等待时间仅为数据包传输时间的两倍,加上服务器响应所需的时间加上TCP的少量开销(由于它是可靠的协议(protocol),因此需要确认)。除非选择的服务器更近或以某种方式影响数据包到更快路由的路由,否则无法加快传输时间(一旦选择了要使用的本地ISP,多数情况下这将不受您的控制)。
您端的任何缓冲量都不会减少与服务器的往返时间。
此外,客户端和服务器之间的网络跳数越多,传输时间从一瞬间到下一瞬间的变化就越大。数据包遍历的每个路由器,并且其所经过的每个链路都有其自身的负载,拥塞等,这些负载会随时间而变化。您可能会观察到一个最小的渡越时间(永远不会比x快),但是随着时间的流逝,许多因素会影响它,使其比某些时候更慢。甚至可能会发生ISP将路由器脱机进行维护的情况,这会给处理流量的其他路由器增加更多负载,或者使跃点之间的路由出现故障,因此使用临时但较慢和较长的路由代替了它。从字面上看,有成百上千种可能导致运输时间随时间而变化的事物。通常,从一分钟到下一分钟变化不大,但是在一天中或更长的时间内很容易变化。
您没有说这是否相关,但是当您在给定的往返行程中延迟时间很短或性能非常重要时,您想要做的就是减少等待的往返次数。您可以通过以下两种方法进行操作:
1.不要对小的数据进行排序。 发送大量数据的最慢方法是发送少量数据,等待响应,发送更多数据,等待响应等...如果要发送的字节数为100,则发送数据每次等待一个字节一次,往返时间为X,则发送所有数据的总时间为100X。相反,请收集更大的数据并立即发送。如果一次发送全部100个字节,则总延迟可能只有X而不是100X。
2.如果可以,请并行发送数据。 如上所述,在往返时间较差时,发送数据,等待响应,发送更多数据,等待响应的模式很慢。如果可以对数据进行标记以使其独立存在,那么有时您可以并行发送数据,而无需等待先前的响应。在上面的示例中,发送1个字节,等待响应,发送下一个字节,等待响应非常慢。但是,如果您发送1个字节,然后发送下一个字节,然后发送下一个字节,然后稍后处理所有响应,则您将获得更好的吞吐量。显然,如果您已经有100字节的数据,则最好一次发送所有数据,但是如果数据是实时到达的,则可能只想在数据到达时将其发送出去,而不必等待先前的响应。显然,您能否执行此操作完全取决于客户端和服务器之间的数据协议(protocol)。
3.一次发送更大的数据。 如果可以,请一次发送更大的数据块。根据您的应用程序,在发送之前实际等待数据累积可能有意义,也可能没有意义,但是如果您已经有100字节的数据,则尝试一次全部发送而不是分小块发送。
关于node.js - 为什么在静态连接时Web套接字的延迟会有所不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25357758/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!