Node.js服务器在没有调用“;end()"用于服务器发送的事件
Node.js server did not work without calling "end()" for Server Sent Events
我有一个配置的nginx
服务器实例,它与一些Node.js
实例一起工作,如下所示:
nginx部分:
upstream app_nodeSocketServer {
server 127.0.0.1:3001;
}
[...]
location /nodeSocket {
proxy_pass http://app_nodeSocketServer/;
}
Node.js部分:
var express = require('express');
var app = express();
var os = require("os");
app.get('/', function (req, res) {
res.writeHead(200, {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Connection": "keep-alive"
});
// var interval = setInterval(function() {
res.write("data: Uptime: " + os.uptime() + "'n'n");
res.end();
// }, 1000);
/* req.connection.addListener("close", function () {
clearInterval(interval);
}, false);*/
});
app.listen(3001, function () {
console.log('Example app listening on port 3001!');
});
因此,如果我调用http://domain/nodeSocket
,就会调用node.js部分并显示响应。
将其与服务器发送的事件一起使用:
<html>
<head>
</head>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>
<script>
var url = "http://domain/nodeSocket";
var source = new EventSource(url);
source.onmessage = function(event) {
console.log(event.data);
document.getElementById("result").innerHTML = event.data + "<br>";
};
</script>
这也在起作用。
问题
在所有将Node.js
与服务器发送的事件一起使用的示例中,我没有看到任何行res.end()
。但当我从代码中删除这一行时,事件就不再显示了。
这种行为的原因是什么?
目前,每三秒调用一次服务器端事件客户端调用,因为这是服务器端关闭连接后的标准重新连接值。
据我所知,服务器端不能关闭连接,而是在客户端被"破坏"之前发送数据。
您必须禁用nginx的代理缓冲,否则nginx在响应客户端之前等待响应结束。看见http://nginx.org/r/proxy_buffering有关详细信息,
相关文章:
- 使用JSP从服务器检索和显示图像
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 客户端服务器REST API captcha实现
- 正在将base64 jpeg从input-type=file上传到服务器
- "无法获取/null”;当使用nodejs运行服务器时
- Node.js服务器问题-已添加“/"在浏览器中查找文件时
- "对象不是函数“;当将Node.js HTTP服务器对象传递给Socket.IO时
- 说明Node.js项目:是否只有一个"服务器文件“;在node.js中
- Node.js服务器在没有调用“;end()"用于服务器发送的事件
- 如何改变“;到markdown.js"因此它将作为服务器端JScript运行
- "与服务器的连接不成功”;尝试在WebView中调用javascript时
- 在服务器上浏览代码:如何获得“;窗口”"位置”;以及其他“;窗口“;属性,通常是浏览器对象
- 如何使HtmlGenericControl属性runat="服务器”;.从代码中访问它
- 构建一个2d html5画布游戏,并尝试用javascript连接到服务器以创建播放器"高芯&”;
- 用rel=“"并且href=""使用服务器控制按钮
- Dojo.request.post-返回的promise说"拒绝”;,但服务器似乎已经接受了请求
- 从服务器检索命名为“data:"”以外的SSE的数据
- 如何使用php函数"file_get_contents"服务器发送事件来监视服务器上文件的修改
- 添加“;b服务器端":数据表中的true给出错误TypeError:g为null
- "最佳“;用JavaScript或服务器端C生成约500个小图像的方法