在时间密集型应用程序中正确使用node.js和Socket.IO的其他技术?

时间:2011-08-22 03:05:22

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

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

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

感谢。

1 个答案:

答案 0 :(得分:1)

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

  

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

     

...

     

减少数千字节的数据   到2个字节......并且将延迟从150ms减少到50ms远远超过   边缘。事实上,仅这两个因素就足够了   WebSocket对Google非常有趣。

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