Тестовое задание от ООО Интеллектуальные системы на Python 3.10 с использованием asyncio
.
Реализован сервер и два клиента, которые обмениваются сообщениями через TCP-соединение.
- Сервер слушает TCP порт и принимает подключения клиентов.
- Клиенты с интервалом от 300 до 3000 мс отправляют сообщения:
[номер] PING
- Сервер с вероятностью 10% игнорирует запрос, в остальных случаях через 100–1000 мс отвечает:
[номер_ответа/номер_запроса] PONG (id_клиента)
- Каждые 5 секунд сервер шлёт всем клиентам keepalive-сообщение:
[номер] keepalive
- Все ответы сервера нумеруются сквозным счётчиком.
Сервер пишет server.log
:
дата;время_запроса;текст_запроса;время_ответа;текст_ответа
Пример проигнорированного запроса:
2025-08-22;12:00:01.234;[0] PING;(проигнорировано);(проигнорировано)
Клиенты пишут client1.log
, client2.log
:
дата;время_отправки;текст_запроса;время_ответа;текст_ответа
Пример с таймаутом:
2025-08-22;12:00:02.567;[1] PING;(таймаут);(таймаут)
Пример keepalive:
2025-08-22;;;12:00:05.123;[15] keepalive
Требуется Python 3.10+
git clone https://github.com/Rocket-coder/hh_tcp_task.git
cd hh_tcp_task
Windows:
python run.py
Linux:
python3 run.py
Скрипт запустит:
- сервер (server.py)
- два клиента (client.py 1, client.py 2)
и остановит их через 5 минут.
После работы будут созданы:
- server.log
- client1.log
- client2.log
В директории example_logs находятся примеры таких логов.
Начало работы в 21:38
Сервер и два клиента запущены. Работаем 5 минут...
Client 1 connected: ('127.0.0.1', 63302)
Client 2 connected: ('127.0.0.1', 63305)
21:43 - Timeout! Завершаем процессы...
Все процессы завершены.
- Python 3.10+
- asyncio
- logging