与Nginx长期轮询 - 建议和澄清

0 nginx long-polling

我想对长轮询请求做一些澄清.我为长轮询编写了一个脚本,我在nginx(使用标准配置)上尝试了它并且它可以工作.我注意到了一些事情.如果服务器没有响应60秒后nginx在日志浏览器中返回503错误,可能(或应该)不会永远不会使请求过期,但仅在服务器响应时?如果有可能,我该怎么办?如果不可能,你建议我延长请求,直到服务器停止(60秒)或之前(表明多长时间)?如果之前,您如何建议我终止申请?

Moh*_*ady 5

client_body_timeoutclient_header_timeout都可能是你在找什么

client_body_timeout 1m; # or 60s
client_header_timeout 1m;
Run Code Online (Sandbox Code Playgroud)

将这些值更改为您想要的时间长度,但更常用的方法是例如60秒,然后服务器发送空响应(终止连接),然后客户端重新启动新请求,这也将持续另外60秒,等等..,因为我相信如果用户没有结束请求但实际上关闭浏览器,例如,你会有很多无用的打开连接等待超时.

编辑:不要让请求到期由nginx,让应用程序发送响应,否则你将得到504错误而不是200成功.如果你想进行60秒的长轮询然后将nginx设置为90或120秒,那么当应用程序超过60秒时它应该发送一个空输出,或者可能是一条消息说没有消息像'结束'或'停止',然后javascript会在收到停止消息后发起新请求.还有一点javascript你可以让服务器发送多个消息而不通过使用分隔符或东西终止连接,
另外我想告诉你,一种方法适合所有的工作,但并不总是好,Chrome和Firefox等浏览器可以使用服务器发送事件Web套接字等更高级的方法,有很多解析器库可以检查当前浏览器支持哪些功能并使用最好的功能,如果您要使用服务器发送的事件,例如不是在IE中支持,您可以使用类似这样的示例轻松处理它,并且仅在IE中回退到长轮询.