django 中断管错误的可疑解决方案
Dubious solution for broken pipe error in django
在我的 django 应用程序中,我在极少数情况下在 Ajax 例程中调用location.reload();
。这在Chrome上效果很好,但是在Firefox4中,我在开发服务器上(Django 1.2.5,Python 2.7)上得到了两次error: [Errno 32] Broken pipe
,这大约需要10秒。
而且该错误似乎吃掉了我尝试使用 django 消息框架显示的消息。
不,我把这一行换成了
var uri = location.href;
location.href = uri;
现在重新加载仍然需要大约 10 秒,但 Firefox 会显示该消息。
到目前为止,它有效。但对我来说,这看起来像是一个肮脏的黑客。所以我的问题是:
- 任何人都可以首先解释(或猜测)错误是什么吗?
- 您是否看到将来这个"解决方案"可能会咬我的任何问题?
(注意:我不是第一个遇到这个问题的人)。
首先,这是某些特定浏览器的问题(并且可能在服务器端进行长时间处理),而不是 django 的问题。
来自 django 上的错误报告:
这是常见的错误,每当浏览器关闭连接而开发服务器仍在忙于发送数据时都会发生此错误。我们能做的最好的事情就是有一个更明确的错误消息。
它实际上可以发生在其他系统上,例如来自樱桃
没有什么可担心的,因为这只意味着客户端在服务器之前关闭了连接。在此回溯之后,您的 CherryPy 服务器仍将保持正常运行。
这是对你第一个问题的介绍:
- 任何人都可以首先解释(或猜测)错误是什么吗?
好吧,这只是浏览器关闭连接 - 一种客户端超时。这个 Django + WebKit = Broken pipe 答案确实回答了这个问题。
为什么它通过更改location.href
而不是使用location.reload()
来工作?好吧,我猜,但这只是一个猜测,Firefox的行为略有不同,重新加载会以不同的方式超时。
我认为该消息已被消耗,因为当浏览器拉动触发器并关闭连接时,请求已经发送
。开发服务器是单线程的,这也可能是问题的一个因素。
我通常在真正的(本地)服务器上进行开发(nginx+apache+mod_wsgi,没什么花哨的) - 避免遇到在生产中永远不会发生的愚蠢问题。
- 您是否看到将来这个"解决方案"可能会咬我的任何问题?
好吧,它可能不适用于在重新加载之前检查href
是否已更改的浏览器。或者它可能会命中缓存而不是执行真正的请求(您可以使用 reload() 强制避免缓存)。并且行为可能并非在所有浏览器上都一致。但同样,你已经遇到了浏览器的怪癖,所以我不会太担心它本身。
顺便说一下,你可以简单地做:
location.href = location.href
我宁愿担心处理需要 10 秒!这真的不应该发生。编辑所以看起来是浏览器本身引发了漫长的处理时间和损坏的管道错误。对我来说,听起来像是单线程 Django 服务器上的(糟糕的)并行请求。结束了
在真实的Web服务器上进行测试,优化您的代码;如果这还不够,请使用Celery+Rabbitmq在后台进程上启动长任务;无论如何,不要在一个不是真正问题的问题上浪费时间!
您可能能够忍受location.reload()
和一些调整,或者可能只是一个真正的测试环境!
断开管道错误也可能归结为 Django 调试服务器中缺乏对某些功能的支持 - 一个值得注意的问题是 Django 缺乏对 Range
HTTP 请求的支持(有关详细信息,请参阅此处:Django 中的字节范围),这些请求在交付 [流] 媒体内容时常用
使用数据包捕获程序(如Wireshark)调查实际的HTTP交换可能是值得的,这样您就可以看到问题发生的位置和时间。
- 可以转换显示属性吗?如果没有,什么'这是最好的解决方案
- iPad虚拟键盘-哪一个-javasctript解决方案
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- 找不到以下错误的解决方案
- JavaScript/HTML 错误的解决方案
- React,Flux,React路由器调度错误-可能的批更新解决方案
- windows中的Javascript巨大日期错误..解决方案
- 解析器错误(Javascript初学者寻找解决方案)
- 一些脚本错误,找不到解决方案
- Firebug 调试器无法正确识别语法错误;需要解决方案或卓越的开发环境
- 未捕获的类型错误: $(..).froala编辑器不是一个函数//解决方案被找到,但不确定如何使用它
- 使用谷歌地图进行地理编码,没有OVER_QUERY_LMIT错误-尝试使用PHP解决方案
- 我是应该将移动浏览器虚拟视口视为系统性错误,还是有有效的解决方案
- 在Chrome画布半圆错误的解决方案
- 错误requestAnimationFrame在ie9的任何替代解决方案
- 在为字符串创建自定义regex-camelCase解决方案时,Javascript错误的结果
- django 中断管错误的可疑解决方案
- touchmove事件错误的解决方案
- iMacros w EVAL([javascript]} FORMAT尝试时出现错误,没有解决方案
- 得到一个未定义的索引错误,不知道为什么完全不知道为什么,似乎找不到任何其他解决方案