Jos*_*uer 4 python apache django mod-wsgi django-piston
我有一个使用Python实现的Web服务的iPhone应用程序,使用Django和Piston,通过WSGI在Apache服务器上运行.
有时,应用会在呼叫结束前关闭与服务器的连接.当它这样做时,它会导致:
[Tue Sep 06 11:29:46 2011] [error] [client 207.35.164.99] mod_wsgi (pid=820): Exception occurred processing WSGI script 'myscript.wsgi'.
[Tue Sep 06 11:29:46 2011] [error] [client 207.35.164.99] IOError: failed to write data
Run Code Online (Sandbox Code Playgroud)
出现在我服务器的错误日志中.
我可以通过不明确关闭连接来"修复"应用程序中的问题,但只是让它完成下载并忽略结果.但是,如果可能的话,我想在服务器端修复此问题.我该怎么做?
[免责声明:这是"为什么它不能轻易完成"的解释,而不是解决方案]
作为@Slott指出,这绝对是在技术上正确的行为stream.close
或stream.write
叫上一个封闭的插座.但是,我理解问题的动机...在wsgi应用程序的上下文中,客户端在完全或部分读取后终止连接不是"特殊"行为,它始终发生.因为它未被处理会留下令人意想不到的印象/代码对此毫无准备,实际上它是预期的,并且不应该值得注意.所以修好会很好.
问题是你必须找到区分案件的方法......
像"客户端读取'状态:304',然后关闭连接"或"客户端读取所有字节,然后关闭连接,即使它已经请求连接应该被重用"的情况"是不适合不发出任何排序的情况除了log.debug()
通话之外的日志记录.
但是"客户端在文件中间停止读取因为ISP路由器中断时连接中断"的情况值得记录错误.有些东西没有成功完成,应该回滚服务器应用程序构建的任何事务状态.在这种情况下,IOError
向上传播是正确的做法.
如果在每个地方都可以提出这些错误,那么这些错误只能是可以修改的,修改代码以区分这两种情况.在那之前,wsgi的作者似乎在谨慎方面犯了错误.因此,我所知道的并没有快速解决这个问题.
(另外,我应该注意这不是django特有的,我使用paste + pylons并且发生同样的事情)
归档时间: |
|
查看次数: |
9812 次 |
最近记录: |