gpt4 book ai didi

python - 客户端关闭与 Django/WSGI 应用程序的连接时如何防止 'IOError: failed to write data'?

转载 作者:太空狗 更新时间:2023-10-30 02:22:58 27 4
gpt4 key购买 nike

我有一个 iPhone 应用程序,它使用以 Python 实现的 Web 服务,使用 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

出现在我服务器的错误日志中。

我可以通过不显式关闭连接来“修复”应用程序中的问题,而只是让它完成下载并忽略结果。但是,如果可能的话,我想在服务器端解决这个问题。我该怎么做?

最佳答案

[免责声明:这是“为什么不能轻易完成”的解释,而不是解决方案]

正如@Slott 所指出的,当在关闭的套接字上调用 stream.closestream.write 时,这绝对是技术上正确的行为。但是,我理解这个问题的动机......在 wsgi 应用程序的上下文中,客户端在完全或部分读取后终止连接并不是“异常”行为,它一直在发生。未处理它给人的印象是它出乎意料/代码没有为此做好准备,而实际上它是预期的,不应该引起注意。所以修复它会很好。

问题是您必须找到一种区分案例的方法...

  • 诸如“客户端读取‘状态:304’,然后关闭连接”或“客户端读取所有字节,然后关闭连接,即使它请求连接应该被重用”的情况也是如此除了 log.debug() 调用之外,不发出任何类型的日志记录是合适的。

  • 但是像“客户端在文件中间停止读取因为 ISP 路由器发生中风时连接中断”这样的情况值得记录错误。有些事情没有成功完成,你的服务器应用程序构建的任何事务状态都应该回滚。在这种情况下,IOError 向上传播是正确的做法。

只有在每个可能出现的地方修改代码以区分这两种情况,此类错误才会被沉默。在那之前,wsgi 的作者似乎在谨慎方面犯了错误。因此,据我所知,没有快速解决这个问题的方法。


(另外,我应该注意这不是 django 特有的,我使用 paste+pylons 并且发生了同样的事情)

关于python - 客户端关闭与 Django/WSGI 应用程序的连接时如何防止 'IOError: failed to write data'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7322578/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com