用于后台处理的Websockets

时间:2011-09-02 10:43:45

标签: http node.js backgroundworker websocket

使用Websockets(彗星,服务器推送......)来解决长时间运行的HTTP请求的问题是一个好主意吗?想象一下,你有一个应用程序,建立在全栈Web应用程序框架上,如Django或Rails。您希望以性能的名义进行一些后台处理。从程序员的角度来看,这很容易做到,但问题出现在UI中。

用户要求立即响应。所以我的想法是使用Socket.IO + node.js + AMQP消息,在后台任务完成后将通知推送回浏览器。我喜欢这个想法,但它仍然感觉像很多工程,只是因为我们不想在我们的主应用程序中长时间运行请求。竞争的想法可能是使用另一个更强大的Web服务器,它可以处理许多长时间运行的HTTP请求。

您认为哪一个更好?

2 个答案:

答案 0 :(得分:2)

  

使用Websockets是个好主意   克服了长时间运行HTTP请求的问题?

是的。与其他技术(如连续或长轮询)相比,您可以节省大量数据。试着看看this article,即第3步。

  

我喜欢这个想法,但它仍然感觉像很多工程   因为我们不想在主应用程序中长时间运行请求。   竞争的想法可能是使用另一个更强大的Web服务器   可以处理许多长时间运行的HTTP请求。

Socket.io为您提取传输层和后备解决方案(如果缺少websockets)。如果您只想将socket.io/node.js/AMPQ堆栈用于消息传递和通知,那么它不应该是一个复杂或耗时的开发过程,但它可能依赖于各种各样的东西。

通过将消息/通知委派给node.js,您可以在很大程度上减轻主要应用程序的负担,这要归功于它的非阻塞架构,尽管您将引入对其他技术的依赖。

另一方面,选择性能更高的Web服务器可能会在一段时间内解决您的性能问题,但您最终可能会扩展系统(向上或向外)。

答案 1 :(得分:1)

WebSockets本身在这里提供的内容很少,例如XHR或jsonp长轮询。从用户的角度来看,通过任一传输进行的消息传递都会感觉相同。从服务器的角度来看,开放的WebSocket连接或打开的长轮询不会暴力不同。

您正在做的事情,无论基础技术如何,都应该做的是将您的应用程序构建为异步 - 事件驱动。