asyncio 的 HTTP 客户端/服务端:aiohttp

jopen 9年前

aiohttp 是 asyncio 的 HTTP 客户端/服务端 (PEP 3156)。

特性

  • 支持 HTTP 客户端 和 HTTP 服务端

  • 开箱支持 Server WebSockets 和 Client WebSockets

  • Web-server 有中间件和可插拔路由

服务器端简单使用示例:

import asyncio  from aiohttp import web  @asyncio.coroutine  def handle(request):      name = request.match_info.get('name', "Anonymous")      text = "Hello, " + name      return web.Response(body=text.encode('utf-8'))  @asyncio.coroutine  def wshandler(request):      ws = web.WebSocketResponse()      ws.start(request)      while True:          msg = yield from ws.receive()          if msg.tp == web.MsgType.text:              ws.send_str("Hello, {}".format(msg.data))          elif msg.tp == web.MsgType.binary:              ws.send_bytes(msg.data)          elif msg.tp == web.MsgType.close:              break      return ws  @asyncio.coroutine  def init(loop):      app = web.Application(loop=loop)      app.router.add_route('GET', '/echo', wshandler)      app.router.add_route('GET', '/{name}', handle)      srv = yield from loop.create_server(app.make_handler(),                                          '127.0.0.1', 8080)      print("Server started at http://127.0.0.1:8080")      return srv  loop = asyncio.get_event_loop()  loop.run_until_complete(init(loop))  loop.run_forever()

项目主页:http://www.open-open.com/lib/view/home/1435309484200