Tornado 作为一个异步 Web 框架,可以同时充当 HTTP 服务器和客户端。下面分别介绍 Tornado 的 HTTP 服务器和客户端的基本用法。

Tornado HTTP 服务器

Tornado 通过 tornado.web.Application 来创建 HTTP 服务器。以下是一个简单的例子:
import tornado.ioloop
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, Tornado!")

def make_app():
    return tornado.web.Application([
        (r'/', MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(8888)
    print("Server is running at http://localhost:8888")
    tornado.ioloop.IOLoop.current().start()

在这个例子中,MainHandler 处理器处理根路径的 GET 请求,并返回 "Hello, Tornado!"。

Tornado HTTP 客户端

Tornado 的 HTTP 客户端模块位于 tornado.httpclient,可以用于发起异步的 HTTP 请求。以下是一个简单的 HTTP 客户端示例:
import tornado.ioloop
import tornado.httpclient

async def fetch():
    url = "http://localhost:8888/"
    response = await tornado.httpclient.AsyncHTTPClient().fetch(url)
    print(f"Response from {url}: {response.body.decode()}")

if __name__ == "__main__":
    tornado.ioloop.IOLoop.current().run_sync(fetch)

在这个例子中,fetch 函数使用 Tornado 的异步特性,使用 AsyncHTTPClient().fetch() 发起了一个 GET 请求,获取服务器的响应,并打印响应的内容。

需要注意的是,Tornado 的 HTTP 客户端是异步的,可以配合 await 和 async def 使用,也可以使用 tornado.ioloop.IOLoop.current().run_sync 来同步运行异步函数。

这两个组件可以在一个 Tornado 应用中同时存在,使得开发者能够灵活地构建同时处理请求和发起请求的系统。可以根据实际需求选择在应用中使用 HTTP 服务器、HTTP 客户端,或者同时使用它们。


转载请注明出处:http://www.pingtaimeng.com/article/detail/7430/Tornado