如何为服务器发送的事件关闭Nginx服务器上的缓冲
问题:Nginx服务器正在缓冲服务器发送的事件(SSE) 设置:节点v12.13.1,Nginx 1.16.1,Chrome v80 情景: 我试着用如何为服务器发送的事件关闭Nginx服务器上的缓冲,nginx,nginx-reverse-proxy,nginx-config,Nginx,Nginx Reverse Proxy,Nginx Config,问题:Nginx服务器正在缓冲服务器发送的事件(SSE) 设置:节点v12.13.1,Nginx 1.16.1,Chrome v80 情景: 我试着用proxy\u buffering关闭来关闭缓冲甚至在服务器响应头中添加了“X-Accel-Buffering”:“no”,但nginx仍在缓冲所有SSE。如果我关闭节点服务器或重新启动nginx服务器,那么所有SSE消息都会批量发送到客户端。我试了很多,但不知道我失踪了 Nginx配置文件: events { worker_connec
proxy\u buffering关闭来关闭缓冲
甚至在服务器响应头中添加了“X-Accel-Buffering”:“no”
,但nginx仍在缓冲所有SSE。如果我关闭节点服务器或重新启动nginx服务器,那么所有SSE消息都会批量发送到客户端。我试了很多,但不知道我失踪了
Nginx配置文件:
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
keepalive_timeout 65;
server {
listen 4200;
server_name localhost;
location / {
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
proxy_pass http://localhost:8700;
}
}
}
节点服务器:
var express = require('express');
var app = express();
var template =
`<!DOCTYPE html> <html> <body>
<script type="text/javascript">
var source = new EventSource("/events/");
source.onmessage = function(e) {
document.body.innerHTML += e.data + "<br>";
};
</script>
</body> </html>`;
app.get('/', function (req, res) {
res.send(template); // <- Return the static template above
});
var clientId = 0;
var clients = {}; // <- Keep a map of attached clients
// Called once for each new client. Note, this response is left open!
app.get('/events/', function (req, res) {
req.socket.setTimeout(Number.MAX_VALUE);
res.writeHead(200, {
'Content-Type': 'text/event-stream', // <- Important headers
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'X-Accel-Buffering': 'no'
});
res.write('\n');
(function (clientId) {
clients[clientId] = res; // <- Add this client to those we consider "attached"
req.on("close", function () {
delete clients[clientId]
}); // <- Remove this client when he disconnects
})(++clientId)
});
setInterval(function () {
var msg = Math.random();
console.log("Clients: " + Object.keys(clients) + " <- " + msg);
for (clientId in clients) {
clients[clientId].write("data: " + msg + "\n\n"); // <- Push a message to a single attached client
};
}, 2000);
app.listen(process.env.PORT || 8700);
var express=require('express');
var-app=express();
变量模板=
`
var source=new EventSource(“/events/”);
source.onmessage=函数(e){
document.body.innerHTML+=e.data+“
”;
};
`;
app.get('/',函数(req,res){
res.send(模板);//另请参见