0

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

4

1 回答 1

5

client_body_timeoutclient_header_timeout可能是您正在寻找的

client_body_timeout 1m; # or 60s
client_header_timeout 1m;

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

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

于 2013-07-18T03:43:26.177 回答