首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >EventSource /服务器-通过Nginx发送事件

EventSource /服务器-通过Nginx发送事件
EN

Stack Overflow用户
提问于 2012-12-03 03:12:20
回答 3查看 36.5K关注 1票数 90

在服务器端使用Sinatra和stream块。

代码语言:javascript
复制
get '/stream', :provides => 'text/event-stream' do
  stream :keep_open do |out|
    connections << out
    out.callback { connections.delete(out) }
  end
end

在客户端:

代码语言:javascript
复制
var es = new EventSource('/stream');
es.onmessage = function(e) { $('#chat').append(e.data + "\n") };

当我通过http://localhost:9292/直接使用app时,一切都很完美。该连接是持久的,并且所有消息都被传递到所有客户端。

然而,当它通过Nginx、http://chat.dev时,连接会被丢弃,并且大约每秒都会触发一个重新连接。

Nginx设置在我看来还可以:

代码语言:javascript
复制
upstream chat_dev_upstream {
  server 127.0.0.1:9292;
}

server {
  listen       80;
  server_name  chat.dev;

  location / {
    proxy_pass http://chat_dev_upstream;
    proxy_buffering off;
    proxy_cache off;
    proxy_set_header Host $host;
  }
}

已尝试在upstream部分中使用keepalive 1024以及在location中使用proxy_set_header Connection keep-alive;

没有什么有用的:(

没有持久连接和未传递到任何客户端的消息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-03 04:05:14

你的Nginx配置是正确的,你只是漏掉了几行。

下面是一个让EventSource通过Nginx工作的“魔法三人组”:

代码语言:javascript
复制
proxy_set_header Connection '';
proxy_http_version 1.1;
chunked_transfer_encoding off;

将它们放入location部分,它应该可以工作。

您可能还需要添加

代码语言:javascript
复制
proxy_buffering off;
proxy_cache off;

这不是官方的做法。

我通过“尝试和错误”+ "googling“得到了这个结果:)

票数 219
EN

Stack Overflow用户

发布于 2015-10-29 20:20:20

另一种选择是在响应中包含一个值为'no‘的'X-Accel-Buffering’标头。Nginx特别对待它,请参阅http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_buffering

票数 18
EN

Stack Overflow用户

发布于 2015-02-15 04:42:55

不要自己从头开始写这篇文章。Nginx是一个很棒的evented服务器,它的模块可以为你处理SSE,而不会降低上游服务器的性能。

查看https://github.com/wandenberg/nginx-push-stream-module

它的工作方式是订阅者(使用SSE的浏览器)连接到Nginx,连接到此为止。发布者(你在Nginx背后的服务器)会在相应的路由上向Nginx发送一个POST,在那一刻Nginx会立即转发到浏览器中等待的EventSource监听器。

这种方法比让ruby SSE服务器处理这些“长轮询”SSE连接更具伸缩性。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13672743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档