【问题标题】:Additional technologies to correctly use node.js and Socket.IO in a time-intensive app?在耗时的应用程序中正确使用 node.js 和 Socket.IO 的其他技术?
【发布时间】:2011-08-22 03:05:22
【问题描述】:

作为一个假设的例子,假设我想制作一个显示人们 twitter 网络的应用程序。我将提供一个 API,允许客户端查询单个用户名。该用户的前 x 条推文将被发送给客户端。然后,将扫描最初的人提到的每个人。他们的前 x 条推文将被发送给客户。这个过程将递归地继续,广度优先,直到达到预定义的深度。客户端将实时接收数据,显示统计数据,例如扫描的用户数、剩余要扫描的已知用户数以及不断增长的推文数据列表。所有处理都不复杂(少量文本的正则表达式),但许多网络请求会从单个初始请求产生。

我真的很想要 node.js 和 socket.io 的出色实时功能,但我觉得这是对这些技术的滥用——它们不适合繁重的服务器端提升。是否有更适合我想要完成的工具集,或者为此目的使用这些工具的特定方式? Milewise 正在做类似的事情,但我认为我的应用程序会比他们的应用程序消耗更多的网络资源。

谢谢。

【问题讨论】:

  • 看来这就是 Websockets(Socket.IO) 的用途。真正的问题是你能不能以异步的方式来做,这样它就不会阻塞服务器,因为节点是单线程的。
  • 使用node做IO没有错。节点被用来发出大量的 IO 请求。它不是为繁重的计算(算法)而设计的

标签: node.js real-time websocket socket.io


【解决方案1】:

您现在可以在网络上获得的最佳网络传输是WebSockets,它在服务器和客户端之间提供持久的双向实时连接。尽管并非所有浏览器都支持它们,但 socket.io 为您提供了a couple of fallback solutions,但是与this article 中所述的 WebSockets 相比,这可能会降低网络性能:

在与 WebSocket 建立连接时,客户端和服务器交换 每帧数据为 2 字节,而 http 为 8 千字节 进行连续轮询时的标题。

...

减少千字节数据 到 2 个字节……将延迟从 150ms 减少到 50ms 远远超过 边缘。事实上,仅这两个因素就足以使 Google 对 WebSocket 非常感兴趣。

除了网络传输之外,其他事情也可能很重要,例如您如何在服务器端获取、格式化和处理数据。在 node.js 中,CPU 密集型计算可能会阻塞其他异步操作的处理,因此应将此类操作分派到单独的线程或进程以防止阻塞。

【讨论】:

  • 这是否适合使用 WebWorkers/某种任务队列?
  • @Ryan:是的,node-webworker 和/或cluster 之类的内容适合在这种情况下使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多