7

我实际上是在尝试创建一个使用Server-Sent Events Draft的 Web 应用程序。据我所知,SSE 每个连接使用一个线程,并且由于服务器将持续向客户端泵送数据,甚至一秒钟都不会空闲,因此我无法将线程放回池中。

因此,我尝试使用 Node.JS(迄今为止我还没有使用过)来处理与服务器的连接。我已经阅读了HTML5 Rocks 对 SSE 的介绍,并且有一个将 SSE 与 Node.JS 集成的代码示例。

但是,我对 Node.JS 是否会同时处理数千个客户端连接并比 Apache 服务器更有效地利用服务器感到困惑?谁能帮我理解 Node 在这里的具体表现?

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

4

4 回答 4

4

php:

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

对比

节点.js

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

睡眠阻塞php线程5秒的区别。在这 5 秒内,服务器需要有一个专用线程绝对什么都不做。每个用户一个线程。

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

于 2011-03-24T20:23:46.817 回答
3

尝试查看有关并发连接的了解 node.js 事件循环文章。我建议创建一个使用 WebSockets 而不是服务器发送事件的 Web 应用程序,因为浏览器对 SSE 的支持少于 WebSockets。还有很多基于 WebSockets 的 node.js 模块和 GitHub 上的源代码可以“启发”你。

于 2011-03-25T07:55:06.997 回答
2

但是,我对 Node.JS 是否会同时处理数千个客户端连接并比 Apache 服务器更有效地利用服务器感到困惑?谁能帮我理解 Node 在这里的具体表现?

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

TJ 的电子书也可以帮助您掌握事件。当发生某些事情时,将调用与该事件关联的回调。

于 2011-03-25T00:16:58.007 回答
1

尝试使用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"});
});
于 2012-10-11T22:15:02.163 回答