Node.JS服务器发送的事件
我实际上正在尝试创建一个将利用Server-Sent Events draft的web应用程序。据我所知,SSE每个连接使用一个线程,并且由于服务器将持续向客户端泵送数据,即使一秒钟也不会闲置,因此我无法将线程恢复到池中。Node.JS服务器发送的事件
因此,我试图使用Node.JS(我没有使用,直到日期)来处理连接到服务器。我已经通过了HTML5 Rocks introduction to SSE,并且有一个将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处理20k +并发连接,我需要做什么?也许我应该要求,作为一个单独的部分 – 0xff0000 2011-03-25 03:58:51
关键是确保节点没有被计算粘在一起,一个糟糕的while循环会使作品损坏。 – generalhenry 2011-03-25 08:05:04
不过,我很困惑, 的Node.js是否会同时处理成千上万的 客户端连接和 更有效地利用服务器 比Apache服务器?任何人都可以帮助 我明白Node将 在这里的行为?
我想你应该读Understanding event loops and writing great code for Node.js以更好地掌握事件循环。在node.js中,没有任何东西可以阻止,这将为你节省大量的CPU周期。
另外TJ's ebook可以帮助你掌握事件。当事件发生时,与该事件相关的回调将被调用。
尝试一下Understanding the node.js event loop文章关于并发连接。我建议创建一个Web应用程序,它利用的WebSockets而不是服务器发送的事件,因为小规模企业较少受到浏览器比WebSockets的支持。还有很多基于WebSockets的node.js模块在GitHub上有源代码可以“激发”你。
这和socket.io很容易不关心浏览器支持什么传输,因为它甚至可以在ie6中模拟套接字 – generalhenry 2011-03-25 08:04:29
感谢您的指针。我在考虑更多关于Server-Sent Events的内容,节省了宝贵的带宽,因为它只接受一个请求,并在此之后不断推送数据。 – 0xff0000 2011-03-25 09:04:38
尝试使用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"});
});
如果你还没有,看这个介绍视频(是的,它的长,但它的好)http://www.yuiblog.com/blog/2010/05/20 /视频达尔/ – generalhenry 2011-03-24 20:03:22
你知道,IE和FF是一个不走这个方法对吗? – 2011-03-25 00:28:32
@generalhenry - 感谢您的链接。将检查出来。 – 0xff0000 2011-03-25 03:54:04