У меня есть программа, которая измеряет время, затрачиваемое студентом на выполнение задания.
Программа подключена к Интернету, и студент с самым низким временем получает приз на веб-сайте.
Учитывая, что ПК может неправильно измерять время (я видел, как это происходит), или ученик может предварительно загрузить общую библиотеку для перехвата вызовов ОС и подсчета фальшивого времени, время должно быть выполнено на стороне сервера.
В настоящее время моя логика выглядит так:
- Клиент сигнализирует о запуске сервера.
- Сервер записывает время и отправляет ACK обратно клиенту.
- Клиент запускает задание после получения ACK.
- Клиент завершает задачу и отправляет уведомление на сервер.
- Сервер записывает время и вычисляет прошедшее время.
Проблема заключается в том, что она включает в себя задержку от момента, когда Сервер отправляет ACK, до момента, когда Клиент получает его +, когда Клиент заканчивает работу, до момента, когда Сервер получает сообщение. Если задержка составляет 400 мс, а задание длится 6 с, оно составляет довольно большой процент от общего времени.
Есть ли лучший способ измерить время выполнения задания, когда ученик или ПК могут быть ненадежными?