Node.JS上的服务器发送的事件

我实际上正在尝试创build一个将使用Server-Sent Events草案的Web应用程序。 据我所知,SSE每个连接使用一个线程,并且由于服务器将持续向客户端泵送数据,即使是一秒钟也不会闲置,所以我无法将线程恢复到池中。

因此,我试图使用Node.JS(我没有使用,直到date)处理连接到服务器。 我已经通过了SSE的HTML5 Rocks简介,并且有一个将SSE与Node.JS集成的代码示例。

然而,我很困惑,Node.JS是否会同时处理数千个客户端连接,并比Apache服务器更有效地利用服务器 ? 任何人都可以帮助我理解Node究竟是如何行事的?

对不起,如果我听起来有点太模糊。 我准备尽可能多的澄清! 谢谢!

PHP:

do { sendMsg($startedAt , time()); sleep(5); } while(true); 

VS

的node.js

 setInterval(function() { constructSSE(res, id, (new Date()).toLocaleTimeString()); }, 5000); 

它的睡眠阻塞的PHP线程5秒的差异。 在这5秒钟内,服务器需要一个专门的线程, 每个用户一个线程。

使用node.js版本的setInterval不会阻塞线程。 一个node.js线程可以处理所有的用户。

试着看看了解关于并发连接的node.js事件循环文章。 我build议创build一个Web应用程序,它使用WebSockets,而不是Server发送的事件,因为SSE不像浏览器支持WebSocket。 也有很多基于WebSockets的node.js模块,在GitHub上有源代码可以“激发”你。

然而,我很困惑,Node.JS是否会同时处理数千个客户端连接,并比Apache服务器更有效地利用服务器? 任何人都可以帮助我理解Node究竟是如何行事的?

我认为你应该阅读理解事件循环,并为Node.js编写出色的代码,以更好地掌握事件循环。 在node.js中没有任何东西是阻塞的,这将节省大量的CPU周期。

另外TJ的电子书可以帮助你掌握事件。 当事件发生时,与该事件相关的callback将被调用。

尝试使用express + connect-sse :

 var sse, express, app; sse = require('connect-sse')(); express = require('express') app = express() app.get('/events', sse, function (req, res) { res.json("this is an event"); res.json({here: "is", another: "event"}); });