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

Tornado/Async Web服务器理论,如何处理较长时间运行的操作以利用异步服务器

令狐新翰
2023-03-14

我刚刚开始研究龙卷风和异步Web服务器。在许多龙卷风的例子中,较长的请求由以下内容处理:

  1. 致电tornado Web服务器
  2. tornado对api进行异步web调用
  3. 让tornado在回调等待调用时继续接收请求
  4. 在回调中处理响应。服务器对用户

因此,假设用户在/retrive向tornado服务器发出请求/retrieve将向内部apimyapi.com/retrieve\u posts\u请求用户id/或w/e。获取请求时,api请求可能需要一秒钟的时间才能运行,然后当它最终返回tornado服务器时,响应就会启动。首先,这种气流是使用龙卷风的“正常”方式吗?网上的许多代码示例都建议这样做。

其次,(这就是我开始困惑的地方)假设上面的流是标准流,那么myapi.com应该是异步的吗?如果它不是异步的,并且每个请求可能需要几秒钟,那么它不会产生与阻塞服务器相同的瓶颈吗?也许龙卷风或任何异步的普通用例的例子将有助于澄清这个问题?谢谢你。

共有1个答案

闻人树
2023-03-14

是的,正如我理解你的问题,这是龙卷风的正常用例。

如果对Tornado服务器的所有请求都会向myapi.com发出请求,并且myapi.com被阻止,那么是的,myapi.com仍然是瓶颈。然而,如果只有一些请求必须由myapi.com处理,那么Tornado仍然是一个胜利,因为它可以在等待对myapi.com的请求的响应时继续处理这些请求。但是不管怎样,如果myapi.com不能处理负载,那么在它前面放一个Tornado服务器并不能神奇地解决这个问题。不同之处在于,即使在myapi.com忙时,您的Tornado服务器仍然能够响应请求。

 类似资料:
  • 我们有一个不稳定的旧单块系统,95%的请求在500毫秒内处理,但其他5%需要 我们当前的方法是使用具有指数回退重试机制的异步http客户端。但随着流量的增加,这将导致性能问题 我的想法是在S中有一个超时500毫秒的同步超文本传输协议调用和一个回退方法,该方法将一个任务添加到队列中,以便将来重试超文本传输协议请求,同时将202返回给C,并返回一个链接来检查任务的状态,类似于。我知道我需要将S公开的服

  • 我正在应用程序上启动一个spring批处理作业,开始使用 spring.batch.job.names工作 不幸的是,这以某种方式延迟了tomcat服务器的启动。作业的运行时间为几分钟,因此我得到以下错误: localhost上的Tomcat v8.0服务器无法在45秒内启动。如果服务器需要更多时间,请尝试在服务器编辑器中增加超时。 问题:如何在不阻止tomcat启动的情况下运行此作业?例如异步运

  • 我试图了解gRPC中的异常处理机制是如何工作的。 除了try-catch块之外,还有其他方法来处理运行时异常,例如服务器端的IllegalArgumentException吗? 例如,我有一些gRPC流式客户端服务,当传递的参数不满足深层次的一些断言时(在某些库中,例如,com.google.common.base.Preconditions),方法onNext抛出IllegalArgumentE

  • 我正在尝试将一个向服务器发送消息的异步任务迁移到RxJava。该任务大致执行以下操作: 1) 创建将要发送的消息(保存到数据库) 2)向用户显示消息(状态为“发送”) 3)将消息发送到服务器(下面的代码段) 4)将消息标记为已发送或失败(保存到数据库) 5)更新UI 我创建了所需的Rx链,部分如下所示: 当我订阅上述内容时,我会得到一个一次性的。通常,我会将其添加到CompositeDisposa

  • 我试图理解我在其他文章中看到的关于同步和异步web请求的术语,因此,在下面的场景中: 客户机同步地向服务器发送请求(这意味着客户机被阻塞,直到它收到响应),服务器异步地制定响应(它为每个请求启动一个新线程,并在该线程上创建响应)。 请求本身是同步的,而请求的处理是异步的吗?

  • 我有一个基于strut的应用程序,我在其中调用我的Restful Web Service。我的实际服务调用如下所示: 呼叫通过只是罚款,但我想处理的情况下,如果我的服务是关闭,我想超时1分钟,而不是等待这么长时间。