我有一个Django应用程序Web应用程序,我想知道是否有可能让nginx传播中止/接近uwsgi/Django.
基本上我知道nginx的是意识到过早中止/接近,因为它默认为uwsgi_ignore_client_abort"关",你会得到499个nginx的错误,在你的nginx的日志时,请求中止/关闭发送响应之前.一旦uwsgi完成处理请求,它将返回响应nginx时抛出"IO错误".
转向uwsgi_ignore_client_abort"on"只是让nginx不知道中止/关闭,并删除了uwsgi"IO错误",因为uwsgi仍然可以回写给nginx.
我的用例是我有一个应用程序,人们可以非常快速地通过一些ajax结果页面,因此如果快速页面通过我中止了他们跳过的页面的待处理ajax请求,这将使客户端保持清洁和高效.但这对服务器端(uwsgi/Django)没有任何作用,因为即使没有任何东西等待响应,它们仍然必须处理每个请求.
现在显然可能存在某些页面,我不希望请求因任何原因而过早中止.但我使用芹菜来处理可能属于该类别的长期运行请求.
这可能吗?uwsgi'shariakari设置让我觉得它在某种程度上......只是无法弄清楚如何去做.
my_resource在Python中命中REST资源()时,uWSGI服务器在其日志中抛出以下错误:
SIGPIPE: writing to a closed pipe/socket/fd (probably the client disconnected) on request my_resource (ip <my_ip>) !!!
uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 164]
IOError: write error
Run Code Online (Sandbox Code Playgroud)
它似乎与超时有关(客户端在请求完成处理之前断开连接).
这是什么类型的超时以及如何解决?
这是我在长期运行应用程序时收到的错误日志。
Oct 22 11:41:18 uwsgi[4613]: OSError: write error
Oct 22 11:41:48 uwsgi[4613]: Tue Oct 22 11:41:48 2019 - uwsgi_response_write_body_do(): Broken pipe [core/writer.c line 341] during GET /api/events/system-alarms/
Nov 19 19:11:01 uwsgi[30627]: OSError: write error
Nov 19 19:11:02 uwsgi[30627]: Tue Nov 19 19:11:02 2019 - uwsgi_response_writev_headers_and_body_do(): Broken pipe [core/writer.c line 306] during GET /api/statistics/connected-clients/?type=auto&required_fields=0,11
Run Code Online (Sandbox Code Playgroud)
另外,我需要详细了解操作系统写入错误和管道损坏的原因。