【问题标题】:Socket.io client socket taking long to respondSocket.io 客户端套接字需要很长时间才能响应
【发布时间】:2019-05-27 12:51:15
【问题描述】:

我正在使用 socket.io 在客户端/服务器之间发送/接收消息。服务器有一个 Redis 实例,用于存储数据并在几毫秒内响应数据。

一些套接字需要很长时间才能返回数据(字符串化的大型 JSON 对象),尽管它几乎是立即从服务器端发送的。因此,我正在寻找解决以下问题的建议:

  • socket.io 需要这么长时间才能发出长字符串是否正常?
  • 我如何知道哪个方法或套接字正在执行需要很长时间的发射?
  • 关于如何提高性能的任何进一步建议?

非常感谢您的帮助

更新:

我尝试使用 Webdis 向客户端提供响应,而不必去服务器获取 Redis 结果。然而,虽然响应出现在console.log 中大约1 秒(与下面的DOMLoadedContent 相同),但websocket 仍然需要大约20 秒并显示0 字节,如下所示:

【问题讨论】:

  • 字符串有多长?您将其称为“长字符串”。是兆字节还是什么的?
  • @Nate 最长的大约 19.5 兆字节
  • 嘿@AfshinGhazi,到目前为止在这个问题上运气好吗?
  • @ForgetfulFellow 还没有解决。我使用 Webdis 将 Redis 数据快速提供给客户端而不是服务器(然后将提供给客户端)。但是我不明白为什么 websocket 需要大约 20 秒才能完成,而数据的 console.log 大约需要 1 秒。

标签: javascript node.js sockets websocket socket.io


【解决方案1】:

您似乎遇到了其他人在使用 socket.io 上传大文件时也遇到过的问题:

Node.JS, Socket.IO & large XML files: extreme performance loss?

一种可能的做法是尝试在 socket.io 中流式传输文件: https://gist.github.com/companje/eea17988257a10dcbf04

至于

我如何知道哪个方法或套接字正在执行需要的发射 长?

您始终可以将 dateTime 传递到从 socket.io 接收的客户端数据中,然后计算时间差,打印出它调用的方法。

【讨论】:

  • 我也很好奇发送这么大的东西。如果是媒体(图像、音频、视频),那么通过套接字发送 URL 并让浏览器像往常一样不通过套接字下载文件会更有意义。这种方法可以减少套接字服务器的负载,也可以让浏览器缓存大数据,这对每个人都有好处。
  • @Nate 大数据来自一个api调用响应
  • @AfshinGhazi 数据类型是什么?因为如果这些都是用于构建 UI 的 JSON 数据,那听起来很疯狂!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2021-07-06
  • 2018-03-18
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多