#actionscript-3
#actionscript-3
Вопрос:
Используя ActionScript, когда несколько клиентов подключены к удаленному SharedObject, он функционирует как «живой» обмен данными, где все клиенты обновляются всякий раз, когда какой-либо клиент вносит изменения. Очевидно, это работает, потому что только сервер имеет фактический доступ к файлу и просто передает изменения.
Есть ли способ включить один и тот же тип функциональности между несколькими локальными swf-файлами, загруженными в автономные проекторы?
В частности: пользователь может запускать несколько (некоторые имеют 60 или более ….) экземпляров клиента онлайн-игры, который включает в себя карту идентичного виртуального мира. Вместо того, чтобы каждый экземпляр загружал одну и ту же карту в память, это значительно сэкономило бы (карта больше, чем Грузия ..) память, Если бы все они могли получить доступ к одним и тем же данным.
Очевидно, что SharedObject создаст проблемы с доступом к файлам, поскольку каждому клиенту необходим доступ на чтение / запись. Существует ли какая-либо другая доступная технология или способ загрузки вспомогательного swf-файла, возможно, для работы в качестве «сервера»?
Ответ №1:
Да, вы можете делать аналогичные вещи с Flash SharedObject. Вы в значительной степени нашли имя, вам просто нужно было его найти 🙂
Проверьте метод getLocal — он позволяет вам получить доступ к локально сохраняемой информации из нескольких файлов.
Несколько вещей:
- Имейте в виду, чтобы установить правильное
localPath
значение, чтобы иметь возможность считывать данные из нескольких файлов. - Имейте в виду, что это хранилище сначала ограничено, и это ограничение обычно определяется пользователем.
- Еще одна важная вещь заключается в том, что пользователь может запретить локальное хранилище. Это означает, что не уверен, что вы всегда можете писать там.
- Хотя его можно использовать с флэш-медиа-сервером, стандартное локальное хранилище не будет отправлять события при изменении свойства. Вам нужно создать свой собственный скрипт, если вам нужны обновления в реальном времени.
Надеюсь, это поможет 🙂
Комментарии:
1. Нет. Не работает. Используя пример из API, измените функцию «очистить», чтобы перезагрузить mySo. Запустите экземпляр, задайте значение. Откройте другой, он считывает правильное значение. Теперь попробуйте написать еще раз. Первый экземпляр никогда не получает изменений. Откройте другой экземпляр, он получит правильное значение. Добавьте кнопку для закрытия и перечитайте SO. Все еще нет. (Я даже пытался с помощью setTimeout) Открытый экземпляр никогда не будет обновляться, любой новый экземпляр всегда будет правильно считывать последнее сохраненное значение… Любой запущенный экземпляр всегда видит только свои собственные изменения..
2.Вы установили один и тот же пользовательский
localPath
интерфейс для всех этих экземпляров? Если вы этого не предоставили, это не сработает. И если вы читали руководство, сказано, что это возможно, так что .. 🙂3. на самом деле, API для метода getLocal() гласит: «Возвращает ссылку на локально постоянный общий объект, который доступен только текущему клиенту». но! Существует частичное решение: независимо от того, сколько клиентов совместно используют объект, последний, кто записывает в него, всегда является постоянным, поэтому закрытие SO и повторное открытие его приведет к получению текущего значения. К сожалению, нет событий, на которые вы могли бы подписаться, поскольку SharedObject не расширяет EventDispatcher. я считаю, что это дает мне более чем достаточную функциональность