Показать сообщение отдельно
Старый 19.07.2014, 03:12
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 6  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Как реализовать:
Слушать сокет соединение (не crossdomain.xml забросить на веб сервер, а именно сокетный коннект слушать) по нужному порту и ждать от клиентов сообщение "<policy-file-request/>" в ответ всегда отправлять "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\" /></cross-domain-policy>" (нулевой байт в конце не забываем так как это xmlsocket) и закрыть соединение.

Файл политики спрашивается при прямом сокет коннекте в трёх вариантах по очереди:
1. Сначала по 843 порту. Если рутовый доступ есть, то лучше его использовать, так как он первый спрашивается.
Если нет ответа то
2. По указанному порту в Security.loadPolicyFile. Следует использовать в случаях когда не хочется смешивать два протокола xml-строковый (по которому общается политика) и например игровой бинарный.
Если нет ответа то
3. По тому же порту которому устанавливается соединение. Самый простой, но минус в том что нельзя адекватно организовать очередь пакетов (по хорошему нужно делать, пакеты могут быть не полные) так как всегда будешь ожидать строку "<policy-file-request/>" для всех клиентов.

Пример простого сокет серверного коннекта на AIR с двумя клиентами в виде игры крестики-нолики по третьему варианту.
xo.zip
по аналогии такой же сервер будет и на java, и на php, и на c# и на C++

Если всё правильно делать, то флеш плеер всегда спросит эти 3 варианта. если где то выдалось cross-domain-policy то законнектиться.
По опыту скажу, что если есть возможность разделить web сервер (nginx, apache) и игровой сервер то лучше вешать на 80 порт, так как 80 у всех пользователей открыт (кроме пользователей которые через прокси сидят, с only http, тут уже ничего не поделаешь)


Последний раз редактировалось Nooob; 19.07.2014 в 08:19.