Измерение прошедшего времени дистанционно - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть программа, которая измеряет время, затрачиваемое студентом на выполнение задания. Программа подключена к Интернету, и студент с самым низким временем получает приз на веб-сайте.

Учитывая, что ПК может неправильно измерять время (я видел, как это происходит), или ученик может предварительно загрузить общую библиотеку для перехвата вызовов ОС и подсчета фальшивого времени, время должно быть выполнено на стороне сервера.

В настоящее время моя логика выглядит так:

  1. Клиент сигнализирует о запуске сервера.
  2. Сервер записывает время и отправляет ACK обратно клиенту.
  3. Клиент запускает задание после получения ACK.
  4. Клиент завершает задачу и отправляет уведомление на сервер.
  5. Сервер записывает время и вычисляет прошедшее время.

Проблема заключается в том, что она включает в себя задержку от момента, когда Сервер отправляет ACK, до момента, когда Клиент получает его +, когда Клиент заканчивает работу, до момента, когда Сервер получает сообщение. Если задержка составляет 400 мс, а задание длится 6 с, оно составляет довольно большой процент от общего времени.

Есть ли лучший способ измерить время выполнения задания, когда ученик или ПК могут быть ненадежными?

1 Ответ

0 голосов
/ 22 декабря 2011

В некоторых соревнованиях учащийся или участник должны загрузить свою двоичную программу (или, возможно, исходный код) на ваш сервер, который вы контролируете. Вы могли бы сделать это. В частности, если это код ученика, вам, вероятно, может потребоваться загрузить исходный код и ограничить его некоторым API, например, Запустите его в среде chroot.

...