当前位置: 首页 > 知识库问答 >
问题:

优雅地关闭Tornado流媒体请求

卢作人
2023-03-14

我有一个TornadoRequestHandler@Tornado.web.stream\u request\u body装饰器,允许对处理程序进行分块流式处理。

在允许流式传输之前,我需要执行身份验证和其他一些检查。我试图在CrisestHandler.prepare()方法中实现这些,但是当我使用请求向处理程序传输数据时,检查失败,连接突然关闭,我看到一个异常:

requests.exceptions.ConnectionError:[Errno 32]管道破裂

我的方法如下:

def prepare(self):
    check = some_function()
    if not check:
        self.set_status(400)
        self.write('some error message')
        self.finish()
        return

如何确保请求正常关闭,以便在检查失败时向客户端返回错误消息?

共有1个答案

朱淮晨
2023-03-14

在HTTP/1中很难优雅地处理这个问题。大多数客户机只是盲目地编写请求,在编写完整的请求之前不会寻找服务器的响应,因此阻止他们发送整个请求的唯一方法是突然关闭连接。

您想要的行为可以在一个名为100-继续的模糊HTTP功能中找到。如果客户端支持这一点,那么它将等待准备()完成,以查看是否有错误,然后再上传请求。请求不支持此功能。如果在读取时传递expect_100_continue=True,则Tornado的默认HTTP客户端会这样做。

 类似资料:
  • 如果我们在后台启动KafkaStream应用程序(比如Linux),有没有一种方法可以从外部向应用程序发出信号,从而启动优雅的关机?

  • 优雅关闭,包括两部分,一个是 RPC 框架作为客户端,一个是 RPC 框架作为服务端。 作为服务端 作为服务端的时候,RPC 框架在关闭时,不应该直接暴力关闭。在 RPC 框架中 com.alipay.sofa.rpc.context.RpcRuntimeContext 在静态初始化块中,添加了一个 ShutdownHook // 增加jvm关闭事件 if (RpcConf

  • 在我的webapp中,我创建了一个使用具有固定大小线程池的的服务。我在整个应用程序生命周期中重用相同的。 All在Tomcat中运行,在关闭时出现以下错误: 我确实意识到在关闭tomcat之前需要关闭ExecutorService。Soms所以线程已经谈到了这一点,但我找不到一个干净的方法来处理这一点。 我是否应该使用,就像@tim-bender建议的那样,在优雅地关闭线程和执行器?还是应该使用C

  • Dorado的优雅关闭通过ShutDownHook方式实现,调用端和服务端通过添加hook进行资源的清理和关闭 protected synchronized void addShutDownHook() { if (hook == null) { hook = new ShutDownHook(this); Runtime.getRuntime().addS

  • Graceful shutdown When you deploy a new version of your application, you must replace the previous version. The process manager you’re using will first send a SIGTERM signal to the application to noti

  • 我有一个应用程序运行在嵌入式jetty服务器上。现在我想将服务器作为服务启动/停止。我使用一个脚本来启动服务器。