Skip to content

Тестовые сервер и клиент, обменивающиеся по TCP сообщениями.

Notifications You must be signed in to change notification settings

Rocket-coder/hh_tcp_task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Asyncio Ping-Pong Server & Clients

Описание

Тестовое задание от ООО Интеллектуальные системы на 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+

1. Клонирование репозиторя

git clone https://github.com/Rocket-coder/hh_tcp_task.git
cd hh_tcp_task

2. Запуск

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

About

Тестовые сервер и клиент, обменивающиеся по TCP сообщениями.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages