Простите, вмешаюсь не в мой разговор, но возникли вопросы
Цитата |
---|
Это означает, что соперник не получил ваш отказ от вызова, например, в этот момент у него или у вас слетел Интернет. Поэтому для него вызов остается действующим и он просто не знает, что вы отправили отмену. |
А на сервере разве не отмечается где-то, что один из дуэлянтов "отказался", и теперь эта дуэль в принципе не может играться?
Цитата |
---|
"посылается" - это уже похоже на "вирус", когда-то что-то посылается с компьютера (браузера) пользователя без его ведома. |
Не совсем понятно - что именно вирус? Почему то, что посылается от браузера к серверу, и предусмотрено логикой приложения, считается вирусом?
Цитата |
---|
Таймер тоже в браузере запускать? |
А почему нет? Что вы имеете в виду под таймером? Я имею в виду джаваскриптовую setTimeout, которая сделает определенное действие. Я уверен, у вас таких "таймеров" уже масса на сайте.
Цитата |
---|
Такие штуки блокируются браузером без проблем, а нам искать, как обойти... |
Опять-таки, какие штуки? Действительно не совсем понятно.
Я так понимаю, глобально разговор идет о том, что есть проблема, когда идет дуэль, но один соперник об этом уже не знает по какой-то причине (обрыв связи, баг, глюк и т.д.). Лично я от такой проблемы не страдаю, хотя пару раз случалось. Но меня заинтересовали ваши ответы в духе:
Цитата |
---|
Эти протоколы решаются на уровне предустановки софта - остальное от лукавого. |
Это смотрится как-то странно. Я ни разу не спорю, что "всё не просто" и "всё сложнее, чем кажется", но то, что это решаемо только посредством установки софта - ни за что не поверю. Вообще, для подобного сайта установка какого-то дополнительного софта кажется очень странной затеей, но оставим вопрос, нужно это или нет.
Чем софт
принципиально отличается от браузера? С одной стороны, что за глупый вопрос: софт - это совсем другой стек технологий, это сокеты, это вообще исполнение программы на другом уровне. А с другой: в чем конкретно отличия? Клиентская часть софта все так же на стороне клиента, софт все так же можно дизассемблировать и что-то изменить/запретить. Так же может пропасть связь с интернетом, и надо предусматривать логику в этом случае. Также в браузере уже давно есть технологии тех же сокетов (websockets или более старые технологии long polling, comet). Да, возможно софт как бы более стабильный что ли, но чтобы это было единственным решением проблемы не от лукавого - сомнительно. Если я не прав - поправьте меня, пожалуйста.
Но ладно, меня занесло. Просто утверждение, что подобная проблема решается лишь софтом, и никак в браузере - это, извините, неправда. Есть масса игровых серверов в вебе, где это удачно решено. Может, некоторые из них на флеше, некоторые на html5+js, некоторые те же вебсокеты - но проблема решается. Другой вопрос - настолько ли это приоритетная задача? И возможно сейчас у вас есть намного более важные задачи. Вот тут не спорю.
По сути немного хотелось бы еще сказать: мне кажется, неплохим решением проблемы было бы чуть переделать логику начала разгадывания сканворда.
Сейчас разгадывание начинается сразу же, я бы даже сказал
внезапно. То есть если я отправил приглашение на дуэль, я должен сидеть и пялиться в экран 30 сек, потому что если я вдруг даже отвечу на телефонный звонок на 5 секунд или встану со стула - я уже могу проиграть сильному игроку, для которого фора в 5 секунд практически победа.
Почему бы не начинать разгадывание по обоюдной готовности? Эта идея не нова, применяется на очень многих игровых серверах. То есть если соперник принял вызов на дуэль - мы сначала попадаем на страницу сканворда, но не видим ни слов, ни схемы сканворда. Для этого каждый игрок должен нажать кнопку "Готов играть". После этого появляется и сканворд, и игроки одновременно начинают игру. Кстати, это бы решило (или улучшило во всяком случае) проблему, когда у кого-то банально дольше грузится сканворд. Иногда бывает лишь сканворд откроется, а соперник уже отгадал несколько слов.
Естественно, будет так же возможность "отменить дуэль", если я нажал "готов", а соперник где-то пропал.
И в этом случае, конечно, проблема не решается на 100%. Потому что связь может пропасть и между тем, когда согласился 1й и 2й игроки. Но тут уже надо действительно серверу опрашивать клиентов прямо в момент начала игры или через какие-то периоды времени. С софтом эта проблема тоже автоматически не решится. Но в вебе она решаема так же, как и с софтом.