|
|
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Есть интернет-клиент, черзе который ведется игра между двумя людьми шашки, шахматы, нарды и т.п. Люди ходят по очреди и надо фиксировать время сколько они думали над ходом. Самый простой и надежный вариант это тупо фиксировать все, что ложится в базу по серверному времени. НО допустим юзер отправил свой ход на сервер и с момент отправки с клиента и пока он реально ляжет в базу может пройти достаточно времени, чтобы считать его критичным... То есть я сходил, запрос улетел в интерент, пока он дошел до сайта, пока дождался своей очереди (если сайт хорошо нагружен) в плане обработки его серверным приложением, пока дождался очереди в плане, чтобы проапдейтить поля в базе... Реально сталкивался с такими сайтами не очень гуд имхо... Если же привязаться к времени клиента+смещение относительно времени сервера, появляется риск того, что пользователь руками или программно может изменить время на своей машине, откатив его назад, т.о. получится, что он может думать над ходом бесконечно :) если бы это можно было как-то обойти.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 10:47:33 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Часы на странице, где и игровое поле. И вместе с ходом считывать, что показывают вне зависимости у кого где какое время выставлено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 11:59:57 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Я думаю стоит смотреть информацию запроса на сервере. А когда он ляжет в базу уже несущественно. А в проверке заложите те самые пару секунд на доставку запроса с клиента до сервера. Т.е. у пользователя 30 секунд на обдумывание, а на сервере вы ему даете 33 допустим. У вас веб-приложение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 12:02:28 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
ПилотажныйЧасы на странице, где и игровое поле. И вместе с ходом считывать, что показывают вне зависимости у кого где какое время выставлено. Подделать код страницы имхо реально(но будет ли этим кто-то заниматься?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 12:05:39 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
zloy denПилотажныйЧасы на странице, где и игровое поле. И вместе с ходом считывать, что показывают вне зависимости у кого где какое время выставлено. Подделать код страницы имхо реально(но будет ли этим кто-то заниматься?) В applet и зашифровать. Если не web, то тем более. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 12:10:49 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
zloy den будет ли этим кто-то заниматься?) Так, например, фиксация цейтнота и игра не чемпионаты конечно, но на немаленькие деньги. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 12:16:37 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Кривокодовпользователь руками или программно может изменить время на своей машине, откатив его назад, т.о. получится, что он может думать над ходом бесконечно :) если бы это можно было как-то обойти.... Представьте себе, что на финишной прямой стоит целая толпа судей и у каждого в руке свой собственный секундомер и у каждого своё локальное время. А потом - судейские споры. Поэтому не стоит закладывать в задачу аномалии. Существует лишь одно время. Это время, которое фиксирует сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 13:14:06 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Требуется ведь измерять время не абсолютное, а относительное? т.е. важно сколько игрок ходил. Тут логично не обращаться к часам, а подсчитывать количество тиков таймера (системного, или таймера той среды, которая исполняет приложение). Запускать таймер по началу хода, останавливать в конце - количество тиков в базу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 13:32:04 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
zloy denА в проверке заложите те самые пару секунд на доставку запроса с клиента до сервера. Т.е. у пользователя 30 секунд на обдумывание, а на сервере вы ему даете 33 допустим. а если не 33, а 35. А если 38? Те придется пологаться на с потолка взятое "магическое число", которое может в любой момент измениться. На время сервера можно полагаться только для грубой проверке во избежании подделки, те если от клиента пришло время 30 сек, а по времени сервера он думал 10 мин. - это явно поддела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 13:40:53 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
ML380Требуется ведь измерять время не абсолютное, а относительное? т.е. важно сколько игрок ходил. Тут логично не обращаться к часам, а подсчитывать количество тиков таймера (системного, или таймера той среды, которая исполняет приложение). Запускать таймер по началу хода, останавливать в конце - количество тиков в базу. Да! Именно это решение и вертелось где-то около головы. Спасибо за помощь в его материализацию в буквы :). Приложение на делфи, работает с веб-сервером, на веб-сервере другое приложение, которое работает с базой ну и собственно клиентскими прогами которые на делфи :) Ну думаю, распространненная схема. По воводу мысли ML380 , чувствую дурацкий вопрос: с тиками не работал, можно ли как-то программно менять или сбрасывать счетчик тиков? А так с тиками вариант иделаьный имхо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 14:49:42 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Спрашиваю именно о системном таймере, т.к. если включать свой таймер приложении, то есть вероятность, что кто-то сломает прогу, отключив включение таймера опять же :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 14:52:07 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
ML380Требуется ведь измерять время не абсолютное, а относительное? т.е. важно сколько игрок ходил. Тут логично не обращаться к часам, а подсчитывать количество тиков таймера (системного, или таймера той среды, которая исполняет приложение). Запускать таймер по началу хода, останавливать в конце - количество тиков в базу. Тики или секунды. Какая принципиальная разница? Это не спасает от читерства. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 14:53:44 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Продолжая по поводу мысли ML380 . Допустим ситуация юезр подумал подумал над ходом (мы считаем тики). Потом берет и вырубает прогу (НЕ ПОХОДИВ). Или банально отрубается питаение компа... То есть так, что у программы даже нет вохможности как-то сохранить кол-во тиков, которые юзер думал над ходом... Наши действия? :) Наверно можно усложнить протокол обработки времни хода, чтобы как только наступило время хода юзера на сервер сразу отправляется запрос, что мол вот он получил и было у него такое-то значение тиков на тот момент... НО опять же юзер может, перехватывая пакеты отрубить программе эту возможность и так далее и так далее короче, похоже, что придется тупо смотреть время на сервере? :( Как сказал mayton ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:06:45 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
mayton согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:07:37 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
maytonТики или секунды. Какая принципиальная разница? Это не спасает от читерства. Не существует абсолютно надежных систем безопасности. На каждую защиту найдется свой хак. Другое дело, что поменять системное время много легче, чем перехватывать вызов системного таймера. При этом трудозатраты программиста, пишущего это приложение возрастут незначительно. Кривокодов Продолжая по поводу мысли ML380. Допустим ситуация юезр подумал подумал над ходом (мы считаем тики). Потом берет и вырубает прогу (НЕ ПОХОДИВ). Или банально отрубается питаение компа... То есть так, что у программы даже нет вохможности как-то сохранить кол-во тиков, которые юзер думал над ходом... Наши действия? :) Сохранять их с определенной периодичностью в зашифрованный файл, без которого программа отказывается работать. Другое дело, что он может сделать скриншот, отрубить прогу, и думать над скриншотом, а потом быстро ходить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:15:57 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
авторПотом берет и вырубает прогу (НЕ ПОХОДИВ). Или банально отрубается питаение компа... В большинстве сетевых игр реального времени нельзя сохраняться. Те игра теряется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:18:58 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
В общем убедили. Не буду заморачиваться, хотя было бы круто сделать возможность такого контроля на уровне железа, чтобы вообще никто не мог это сломать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:19:47 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
КривокодовВ общем убедили. Не буду заморачиваться, хотя было бы круто сделать возможность такого контроля на уровне железа, чтобы вообще никто не мог это сломать :) Сломают и это. (Вспомните региональную защиту в DVD-плеерах). Самая лучшая защита - это децентрализация кода (вынос в серверную часть того что должно быть скрыто). И конечно-же формальное соглашение о честности проведения шахматных игр. Последнее впрочем не относится к алгоритмам. Это обще-правовая процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 15:31:08 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
mayton... Самая лучшая защита - это децентрализация кода (вынос в серверную часть того что должно быть скрыто). ... Это разве не централизация? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 16:15:26 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Эээ... Ну или так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 16:16:21 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
Кривокодовхотя было бы круто сделать возможность такого контроля на уровне железа, чтобы вообще никто не мог это сломать :)есть только один гарантированный способ достичь желаемого: не делать защиту вообще то чего нет, сломать невозможно вот тут гуру о том же размышляют ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 16:26:13 |
|
||
|
Как надежно фиксировать время на клиенте
|
|||
|---|---|---|---|
|
#18+
egorychесть только один гарантированный способ достичь желаемого: не делать защиту вообще то чего нет, сломать невозможно вот тут гуру о том же размышляют Почитал. Гониво полнейшее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2010, 16:32:16 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=106&tid=1343813]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
274ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 187ms |
| total: | 539ms |

| 0 / 0 |
