Как вы точно определяете, когда, учитывая сетевую задержку, был отправлен HTTP-запрос? - PullRequest
2 голосов
/ 01 сентября 2011

Я создаю приложение, в котором важно точно знать, когда пользователь отправил запрос на сервер.Это отличается от времени, в которое сервер получил запрос, потому что существует интервал времени - который часто подвержен капризам сетевого трафика и приема ячеек - между моментом, когда пользователь нажимает кнопку отправки, и сервер получаетПОЧТОВЫЙ запрос.

Взаимодействие происходит через веб-браузер с JavaScript, поэтому любое решение, использующее JavaScript, является приемлемым.Я думал о том, чтобы узнать текущее время на компьютере пользователя или смартфоне с помощью JavaScript и использовать его в качестве метки времени для отправленного запроса, но это само по себе не будет надежным, поскольку часы на компьютере пользователя могут быть выключены.Пожалуйста, предположите, что часы на сервере точные.

Ответы [ 2 ]

3 голосов
/ 01 сентября 2011

Я не думаю, что можно получить точное значение. Я думаю, что лучшее, что вы можете сделать, это отправить очень маленький калибровочный AJAX-запрос, который сравнивает время клиента с временем сервера. Это то, что я сделал в любом случае.

Редактировать для уточнения

Как правило, выполняется AJAX-вызов конечной точки сервера с отметкой времени клиента (clock). Как только сервер получает клиентскую метку времени, извлекайте и сохраняйте метку времени сервера вместе с ней. На данный момент вы можете предположить, что времена относительно эквивалентны. Вы не будете знать издержки сети, поэтому они будут другими; также их часы могут быть в другом часовом поясе или просто выключены.

После того, как вы получите эту эквивалентность, вы можете использовать разницу двух раз для калибровки в любое другое время от клиента:

  • clientTime0 - serverTime0 = clientServerDelta
  • (clientTimeX - clentServerDelta) будет примерно таким же по времени сервера, как и при записи clientTimeX.
2 голосов
/ 01 сентября 2011

Вы можете попробовать это:

http://jehiah.cz/a/ntp-for-javascript

, чтобы вычислить точные часы JavaScript, а затем передать это значение с помощью запроса POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...