Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 18.07.2014, 14:23
Vilya21 вне форума Посмотреть профиль Отправить личное сообщение для Vilya21 Найти все сообщения от Vilya21
  № 1  
Ответить с цитированием
Vilya21

Регистрация: Aug 2009
Сообщений: 75
По умолчанию Полиси файл для сокетов

Из справки адоби видно что просто взять crossdomain.xml для сокетов не получится:

Цитата:
Подключения к сокет-серверам разрешались файлом политики, который находился в местоположении по умолчанию на HTTP-сервере с портом 80 того же хоста, что и сокет-сервер. Проигрыватель Flash Player 9 еще поддерживает эту возможность, а Flash Player 10 уже нет. В проигрывателе Flash Player 10 подключения к сокетам разрешаются только с помощью файлов политики сокетов.
Цитата:
Доступ к подключениям к сокетам и XML-сокетам отключен по умолчанию, даже если сокет находится в том же домене, что и подключающийся SWF-файл. Чтобы разрешить доступ на уровне сокетов, можно поместить файл политики сокетов в любом из следующих местоположений:

порт 843 (местоположение основного файла политики);
тот же порт, что и для основного подключения к сокету;
другой порт.
Как же тогда забирать файл политик, если порт 843 закрыт на сервере или на роутере клиента у провайдера клиента или у корпоративного файрволла? Это получается что я не могу сделать приложение на сокетах "для всех"?

Старый 18.07.2014, 15:05
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
843 это порт по умолчанию. Его можно принудительно запрашивать на другом порте, через xmlsocket, к примеру так:
Код AS3:
Security.loadPolicyFile("xmlsocket://example.com:62100");
Если же закрыто все, кроме 80, 443 и 8080, то, увы, на сокетах не получится
__________________
Ко мне можно и нужно обращаться на ты)

Старый 18.07.2014, 15:24
nuToH вне форума Посмотреть профиль Отправить личное сообщение для nuToH Найти все сообщения от nuToH
  № 3  
Ответить с цитированием
nuToH
 
Аватар для nuToH

Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
Не понимаю сути проблемы. Клиент подключаясь к серверу отправляет запрос вида '<policy-file-request/>\x00'
на который сервер может ответить вот так:
Код AS3:
var policy:String = '<cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>\x00';
socket.writeUTFBytes ( policy );
socket.flush ();
socket.close ();
после чего будет второе подключение без запроса policy file.

Старый 18.07.2014, 16:36
Vilya21 вне форума Посмотреть профиль Отправить личное сообщение для Vilya21 Найти все сообщения от Vilya21
  № 4  
Ответить с цитированием
Vilya21

Регистрация: Aug 2009
Сообщений: 75
Суть в том что подключение не состоится и дело до отправки '<policy-file-request/>\x00' не дойдёт, потому что закрыты порты на какой-либо из сторон или по дороге.

Старый 18.07.2014, 18:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Для этого файл и запрашивается принудительно с другого порта
__________________
Ко мне можно и нужно обращаться на ты)

Старый 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.
Создать новую тему Ответ Часовой пояс GMT +4, время: 05:43.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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