Tornado HTTP 服务器实现
Tornado 的 HTTP 服务器实现使用了单线程的事件循环机制,通过异步 I/O 处理并发请求,无需为每个连接创建新的线程或进程。以下是一个简单的 Tornado HTTP 服务器的例子:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, Tornado HTTP Server!")
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 HTTP Server!"。通过 app.listen(8888) 启动了一个监听端口为 8888 的 HTTP 服务器。
Tornado HTTP 客户端实现
Tornado 的 HTTP 客户端实现是异步的,通过 tornado.httpclient.AsyncHTTPClient 来发起异步 HTTP 请求。以下是一个简单的 Tornado HTTP 客户端的例子:
import tornado.ioloop
import tornado.httpclient
async def fetch(url):
client = tornado.httpclient.AsyncHTTPClient()
try:
response = await client.fetch(url)
print(f"Response from {url}: {response.body.decode()}")
except tornado.httpclient.HTTPError as e:
print(f"Error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
if __name__ == "__main__":
tornado.ioloop.IOLoop.current().run_sync(lambda: fetch("http://www.example.com"))
在这个例子中,fetch 函数是一个异步函数,通过 tornado.httpclient.AsyncHTTPClient().fetch(url) 发起异步 HTTP 请求。await 关键字用于等待异步操作的完成。
Tornado 的 HTTP 服务器和客户端都是基于异步 I/O 和事件驱动的设计,使得能够高效地处理大量并发连接,非常适合构建高性能的 Web 应用。
转载请注明出处:http://www.pingtaimeng.com/article/detail/7434/Tornado