【问题标题】:Node.js to Socket.io Time DelayNode.js 到 Socket.io 的时间延迟
【发布时间】:2016-05-11 03:03:13
【问题描述】:

我正在使用 Node.js(v0.12.4) 和 Socket.io(1.3.2) 开发实时交易应用程序。在那方面,当从 Node.js 发送到 GUI(Socket.Io) 的响应时,我面临着一些时间延迟(100 毫秒)。

我不知道为什么在从 Node.js 向 GUI (Socket.IO) 发送数据时会出现时间延迟。

这发生在生产现场。由于网络延迟,我们尝试在生产服务器位置进行调试。但同样的结果。

请有人帮我解决这个问题吗?

【问题讨论】:

  • 您使用哪种浏览器(假设客户端是网络浏览器)。你的服务器配置是什么?为了调试,您已经尝试过什么?
  • 我们已经尝试过 Chrome 和 Firefox。我们都面临时间延迟的浏览器。我们在从 Node 发出数据之前和从 GUI(socket.io) 接收数据之后添加了时间戳。时差大于100ms
  • 这里没有足够的信息供任何人提供帮助。 Node.js 是一个单线程应用程序,因此延迟实际上可能是由于一个不相关的常用脚本需要大约 100 毫秒才能运行。
  • 您能否验证您的生产站点是否通过 websocket 连接到您的客户端?当 websocket 无法通过错误配置的代理访问节点时,我遇到了类似的问题,并且 socket.io 感觉回到了长轮询。

标签: javascript node.js websocket socket.io


【解决方案1】:

我发现它发生的时间延迟。

一旦我将数据从客户端套接字发送到节点,我将显示一些警报消息(“数据已处理”)。需要时间在 GUI 中呈现的警报消息。

此警报消息阻止从 Node 到 Socket 的响应数据。

感谢你们的帮助。

【讨论】:

    【解决方案2】:

    在执行以下操作之前需要注意一件大事。 计算从后端(服务器端)到前端的时间时 (客户端)您需要在使用相同的同一台计算机上运行它 计时晶体。

    即使在高质量主板上,石英晶体驱动的时序也会有所延迟 来自彼此。

    如果您在计算从后端(服务器端)到前端(客户端)的时间延迟时发现没有延迟在同一台电脑上 那么您最初发现的延迟是由网络连接主板计时晶体中的延迟引起的。这将消除 Node.js 和 Socket.io 作为时间延迟的原因。

    基本上你需要找出延迟发生在哪里才能解决问题。

    您需要做的是找出导致项目中最大性能损失的原因。为此,您需要隔离每个过程所花费的时间。您还需要测量从最初检索数据到发布数据的时间延迟。然后测量每个函数、方法和过程的时间延迟。尝试隔离问题。您需要问最耗时的事情是什么?

    为了找出您的性能影响来自哪里,您需要执行以下操作。

    1. 找出多长时间您的代码获取所需信息
    2. 找出多长时间每个信息处理过程在发送数据之前即函数/方法...
    3. 信息发出后,了解信息到达客户端并加载所需的时间。
    4. 将所有时间相加并确保它等于您的性能延迟,以确保您拥有隔离性能泄漏所需的所有数据。
    5. 按最耗时到最耗时的时间延迟对每个方法、函数、流程进行排序。当您发现导致最大延迟的流程时,您就可以解决问题......或者至少探索切实的解决方案......

    您可以使用以下工具来衡量整个代码的性能。

    第一:Chrome 有一个非常好的工具,可以让您查看每段执行代码的性能。

    第二: performance-now node package. You can use it for dev performance testing.

    第三: Stack overflow post on measuring time/performance in js.

    第四:你可以使用console.time()之类的东西

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-11
      • 2018-02-25
      • 2019-09-10
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多