我有一个Node.js通过Nginx设置,它涉及服务器发送的事件。
无论我的Nginx配置如何,sse的连接都会在60秒后断开并重新初始化。如果我直接在为应用程序提供服务的节点的端口上连接到应用程序,则不会发生这种情况,所以这显然是一些Nginx代理问题。
我希望sse连接没有超时。这可能吗?我尝试过调整send_timeout
、keepalive_timeout
、client_body_timeout
和client_header_timeout
但它不会改变任何东西。下面是我的Nginx配置。
upstream foobar.org {
server 127.0.0.1:3201;
}
server {
listen 0.0.0.0:80;
server_name example.org;
client_max_body_size 0;
send_timeout 600s;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_pass http://example.org/;
proxy_redirect off;
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;
proxy_buffering off;
proxy_cache off;
}
}
回答我自己。其实解决方案并不难找到,它只是需要仔细查看nginx留档。
proxy_read_timeout
是对此负责的指令,默认情况下它设置为60秒。因此可以通过设置例如:
proxy_read_timeout 24h;
设置<代码>0 将不起作用,它实际上会使您的所有连接中断,因此我们需要拿出足够长的超时时间。
修复后,我也处理了另一个问题,但这次与浏览器如何处理连接有关。由于某种原因,在5分钟不活动后,浏览器会默默地丢弃连接。更糟糕的是,双方都没有被告知它已被丢弃,因为两者看起来仍然像是连接在线,但数据无法通过。解决这个问题的方法是在间隔的基础上发送一些保持活动ping(简单的sse评论效果很好)。
http://www.html5rocks.com/en/tutorials/eventsource/basics/ 但是,我不明白一个重要的概念--是什么触发了服务器上导致消息发送的事件? 换句话说--在HTML5示例中--服务器只发送一次时间戳: 如果我建立一个实际的例子--例如,一个Facebook风格的“墙”或一个股票报价器,在这个例子中,每当某个数据发生变化时,服务器就会向客户机“推送”
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
当前,我已经在Express API上为服务器发送的事件设置了一个endpoint,当我从cmd调用endpoint时,使用http://localhost:3000/v1/devices,我得到了流,但当我使用新事件源从Vue应用程序调用endpoint时('http://localhost:3000/v1/devices“)但它只会继续加载,而不会流式传输任何数据。是否有我目前没有做的事情要做
整个应该由管理(其中大多数请求与业务相关),还是应该由某个完全专用于处理的管理?目前,所有业务请求和SSE事件都由处理。 如何在集群环境中应用主动-主动模式(=master-master),其中请求在实例之间随机路由? 如果您有更多有用的信息(和注意事项),请随时分享!