gpt4 book ai didi

asynchronous - Tornado 网络和持久连接

转载 作者:行者123 更新时间:2023-12-04 05:18:36 26 4
gpt4 key购买 nike

如何在 TornadoWeb 中编写支持持久连接的 Http 服务器。

我的意思是能够在不关闭连接的情况下接收许多请求并回答它们。
它实际上是如何异步工作的?

我只想知道如何编写处理程序来处理持久连接。
它实际上是如何工作的?

我有这样的处理程序:

class MainHandler(RequestHandler):

count = 0
@asynchronous
def post(self):

#get header content type
content_type = self.request.headers.get('Content-Type')
if not content_type in ACCEPTED_CONTENT:
raise HTTPError(403, 'Incorrect content type')
text = self.request.body
self.count += 1

command = CommandObject(text, self.count, callback = self.async_callback(self.on_response))
command.execute()

def on_response(self, response):
if response.error: raise HTTPError(500)
body = response.body
self.write(body)
self.flush()

完成时执行调用回调。

我的假设是正确的,以这种方式发布的东西会被调用很多次
并且对于一个连接数会随着来自客户端的每个 httprequest 而增加?
但是对于每个连接我都会有单独的计数值?

最佳答案

我不认为你的假设是正确的。我对 Tornado 服务器工作方式的理解是,来自客户端的每个请求都会产生一个新的 RequestHandler . @tornado.web.asynchronous 的目的装饰器是为了防止服务器在您的处理函数( postget 等)返回时自动关闭连接。但归根结底,我认为每个请求只有一个响应。

我不相信来自客户端的其他请求会转到 RequestHandler 类的同一个实例。相反,我的理解是 Tornado 的设置允许长轮询范式。以下是通信流程的示例:

  • 客户提出 POST请求 Tornado 服务器
  • Tornado 服务器检查响应是否准备好,如果没有,您可以添加 RequestHandler到某种堆栈或队列(取决于您的应用程序架构)
  • 服务器提出一个响应(可能另一个用户在队列中添加了一条消息,需要分发到打开的连接等)并将响应分发回RequestHandler。然后调用finish()关闭连接的函数
  • 客户制作另一个 POST请求重复该过程

  • 我认为如果你想实现真正的持久连接,你会想要查看 tornado.websocket ( http://www.tornadoweb.org/documentation/websocket.html)。我还没有尝试过那个模块,所以恐怕我不能在那里提供任何输入。

    祝你好运!

    关于asynchronous - Tornado 网络和持久连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1804013/

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