Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   работают ли флэш и js в разных потоках? (http://www.flasher.ru/forum/showthread.php?t=211305)

undefined 02.08.2015 11:01

работают ли флэш и js в разных потоках?
 
Храню игровой стейт в sharedObject+при любом удобном случае сливаю его на серв.На старте приложения проверяю был ли стейт слит на серв и если нет - сливаю его.Это такая защита от потери стейта в случае аварийного завершения флэшки(+обработка ситуации если юзер просто закрыл вкладку).В некоторых случаях стейт может распухнуть довольно сильно.Соответственно при закрытии вкладки флэш не успевает его целиком скинуть в SO и при след. загрузке этот покоцаный стейт пишется на серв о чем и свидетельствуют серверные логи.
Собственно вопрос если я в js пропишу
Код AS1/AS2:

window.onbeforeunload = function(e) {
..
swf.someFlashCallback();
return null;
}

это приостановит закрытие вкладки до момента пока флэш не закончит запись в SO?

Tails 02.08.2015 12:19

Ну в конечном итоге это не решит проблемы полностью. Даже если вкладка не закроется, пока не дождется выполнения колбека. Что если, будет закрыт браузер? Или компьютер вырубится? Вы все равно можете получить покорцанный стейт.

Предлагаю решать проблему по другому, как например в десктопных играх. Во время сохранения показывать значок, что вот сейчас лучше не вырубать. Сохранять стейты отдельно, каждый раз новый, подписывая датой сохранения. А на сервер отправлять последний корректный. Не забудьте удалять слишком старые и не нужные.

undefined 02.08.2015 12:57

Цитата:

Что если, будет закрыт браузер? Или компьютер вырубится?
В случае аварийного завершения юзеру будет легче объяснить почему его данные пропали.Закрытие же вкладки к таким сценариям никак не отнесешь.
Цитата:

Во время сохранения показывать значок, что вот сейчас лучше не вырубать. Сохранять стейты отдельно, каждый раз новый, подписывая датой сохранения.
Со значком идея здравая.Как я и говорил стейт может быть приличных размеров.Их и так 30 штук хранится для 30-ти неоконченных игр.Так что все впритык. Не хотелось бы вылазить за рамки дефолтных 100 КБ.

Tails 02.08.2015 14:14

  • У каждого браузера может быть своё, уникальное мнение, на счёт работы функций, ожидающей завершения.
  • Эту функцию часто используют всякие недобросовестные сайты.
  • Работу вкладок или браузера, могут завершать и не штатными способами, например, через убийство процесса в дисптечере задач. (Как я)
Это я к тому, что использовать функцию ожидания завершения можно и даже нужно, но полагаться на неё нельзя.
Вы в любом случае можете получать покорцанные файлы сохранении. Если у вас, в этом случае пользователь теряет весь свой прогресс - это очень плохо. В случае нескольких копий, игроком будет потерян прогресс только с последнего сохранения, что уже приемлемо.

Функция ожидания завершения уменьшит количество сбоев сохранении, но не предотвратит их полностью.

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

undefined 02.08.2015 14:49

Цитата:

Если уж вы решили использовать локальное хранилище во время оффлайн работы
локальное хранение - это просто страховка, а не режим работы.Работа с сервером всегда идет фоном.Порешили периодически сливать стейт на сервер. Как начнет сервер заваливаться - увеличим период автосейва.Не идеально конечно,но должно защитить от покоцаных сейвов


Часовой пояс GMT +4, время: 01:00.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.