Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 服务器在Node.JS上发送了事件_Javascript_Node.js_Server Sent Events - Fatal编程技术网

Javascript 服务器在Node.JS上发送了事件

Javascript 服务器在Node.JS上发送了事件,javascript,node.js,server-sent-events,Javascript,Node.js,Server Sent Events,我实际上正在尝试创建一个web应用程序,它将利用。据我所知,SSE在每个连接中使用一个线程,而且由于服务器将持续地向客户机泵送数据,甚至一秒钟都不空闲,因此我无法将线程放回池中 因此,我尝试使用Node.JS(到目前为止我还没有使用过)来处理与服务器的连接。我已经看过了,这里有一个将SSEs与Node.JS集成的代码示例 但是,我不清楚Node.JS是否会同时处理数千个客户端连接,并比Apache服务器更有效地利用服务器?有人能帮我理解Node在这里的具体行为吗 对不起,如果我听起来有点模糊。我

我实际上正在尝试创建一个web应用程序,它将利用。据我所知,SSE在每个连接中使用一个线程,而且由于服务器将持续地向客户机泵送数据,甚至一秒钟都不空闲,因此我无法将线程放回池中

因此,我尝试使用Node.JS(到目前为止我还没有使用过)来处理与服务器的连接。我已经看过了,这里有一个将SSEs与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不会阻止线程。one node.js线程可以处理所有用户

然而,我很困惑是否 Node.JS将处理数千个 客户端连接并发和 更有效地利用服务器 而不是Apache服务器?有人能帮忙吗 让我知道Node的确切含义 在这里表演

我认为你应该阅读以更好地理解事件循环。在node.js中,没有任何阻塞会为您节省大量CPU周期

也可以帮助你掌握事件。当发生某些事情时,将调用与该事件相关联的回调。

请查看有关并发连接的文章。我建议创建一个利用WebSocket而不是服务器发送事件的web应用程序,因为浏览器比WebSocket更不支持SSE。GitHub上还有很多基于WebSocket的node.js模块,带有源代码,可以“启发”您。

尝试使用+:


如果你没有,看这段介绍视频(是的,很长,但很好)你知道IE和FF是不适合这种方法的,对吧?@generalhenry-谢谢你的链接。我会去看看的。@billy moon-是的,我正在考虑在Chrome和Safari以外的浏览器上使用Node.JS+Socket.Io。非常感谢你的链接。然而,当我使用Node.JS传递服务器发送的事件时,我是否需要在Node.JS中写入一些显式管道代码,或者它会在一定程度上自动执行此操作?您可能应该使用数据存储(redis)来存储消息。redis的公共符号学也非常强大。我还建议你看看socket.io,它也很强大。谢谢你用最后一句话来澄清它。这就是我要找的。所以,如果我要进一步优化这个处理,让Node.JS处理20k+并发连接,我该怎么办?也许我应该问,作为一个单独的部分,关键是要确保节点没有被计算搞得一团糟,一个坏的while循环会把工作搞得一团糟。这和socket.io使浏览器很容易不关心支持什么传输,因为它甚至可以在ie6Thanks中模拟用于指针的套接字。我考虑的更多是服务器发送的事件,因为它只接受一个请求,然后不断地推出数据,从而节省了宝贵的带宽。
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"});
});