Rails中如何检测HTTP连接关闭

5
使用Nginx时,当客户端提前关闭连接(例如,连接超时,用户重新加载浏览器或按下停止键等)时,错误日志中有时会记录HTTP 499。我知道Nginx能够检测到这一点,因为它们是最终接收SIGPIPE信号(指示套接字已关闭)的一方,但我想知道是否有可能将此通知返回给Rails?Shopify最近使用了一种非常新颖的方法,在将请求发送到Rails进行处理之前,在Unicorn中检测到了这一点,但我希望能够在Rails应用程序中检测到这一点,例如在长时间运行的事务期间。

根据我的了解(可能是错误的),这个问题目前没有解决方案。(这就是为什么Shopify在发送请求到Rails之前尝试检测它的原因)。问题甚至不在于停止Rails,而是没有办法在事务进行中停止数据库事务,我认为这是你问题的主要关注点。 - Mike Szyndel
1个回答

1
在Rails的调度程序已经开始处理请求之后,就不再与HTTP客户端建立连接了,只有在处理完成后 - 响应才会返回给客户端。因此,在你正在处理请求时无法确定客户端(例如:浏览器)是否已经关闭了连接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接