Skip to content

Instantly share code, notes, and snippets.

@igorzakhar
Last active April 6, 2021 07:10
Show Gist options
  • Save igorzakhar/35c04d4052be3749145d9bdb89962502 to your computer and use it in GitHub Desktop.
Save igorzakhar/35c04d4052be3749145d9bdb89962502 to your computer and use it in GitHub Desktop.
aiohttp stream response example

Сервер на aiohttp, который стримит текущее серверное время.

Как запустить:

python server.py

Откройти в браузере страницу http://127.0.0.1:8080/, на ней отобразится время. Каждую секунду будет добавляться новая запись о времени:

2019-04-15 18:03:26
2019-04-15 18:03:27
2019-04-15 18:03:28
2019-04-15 18:03:29
2019-04-15 18:03:30
...
import asyncio
from aiohttp import web
import datetime
INTERVAL_SECS = 1
async def uptime_handler(request):
response = web.StreamResponse()
# Большинство браузеров не отрисовывают частично загруженный контент, только если это не HTML.
# Поэтому отправляем клиенту именно HTML, указываем это в Content-Type.
response.headers['Content-Type'] = 'text/html'
# Отправляет клиенту HTTP заголовки
await response.prepare(request)
while True:
formatted_date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
message = f'{formatted_date}<br>' # <br> — HTML тег переноса строки
# Отправляет клиенту очередную порцию ответа
await response.write(message.encode('utf-8'))
await asyncio.sleep(INTERVAL_SECS)
if __name__ == '__main__':
app = web.Application()
app.add_routes([
web.get('/', uptime_handler),
])
web.run_app(app)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment