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

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.02.2013, 11:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 11  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Однако консоль сервера показывает что файл не отдается при коннекте из флеша(из браузера ок)
Потому что отладочный stand alone плеер и не будет запрашивать этот файл, ему вообще пофиг файл политик. Я как-то тоже на этом споткнулся, когда свой сервер писал. Все перерыл, а оказлось ларчик просто открывался. Так что если в браузер отдается, значит все ок.
Цитата:
Вопрос почему флешка ищет кроссдоменник здесь 5.187.4.231:8080 , также остаётся не понятным, даже если он не для сокета.
Видимо дело в этой сторонней библиотеке. Советую написать свой простенький коннектор и проверить все на нем. Там строк-то будет штук 30 всего.

Старый 17.02.2013, 11:40
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 12  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Вот чего-чего, а нулевого байта при ответе в том коде я не вижу. Поэтому файл он, может, и отдает, а вот нулевой байт - нет. Это же подтверждается и средствами объективного контроля:
Код:
maxkar@... ~/test $ nc -o hex 5.187.4.231 843 > /dev/null && tail hex
< 00000030 63 79 20 53 59 53 54 45 4d 20 22 68 74 74 70 3a # cy SYSTEM "http:
< 00000040 2f 2f 77 77 77 2e 6d 61 63 72 6f 6d 65 64 69 61 # //www.macromedia
< 00000050 2e 63 6f 6d 2f 78 6d 6c 2f 64 74 64 73 2f 63 72 # .com/xml/dtds/cr
< 00000060 6f 73 73 2d 64 6f 6d 61 69 6e 2d 70 6f 6c 69 63 # oss-domain-polic
< 00000070 79 2e 64 74 64 22 3e 3c 63 72 6f 73 73 2d 64 6f # y.dtd"><cross-do
< 00000080 6d 61 69 6e 2d 70 6f 6c 69 63 79 3e 3c 61 6c 6c # main-policy><all
< 00000090 6f 77 2d 61 63 63 65 73 73 2d 66 72 6f 6d 20 64 # ow-access-from d
< 000000a0 6f 6d 61 69 6e 3d 22 2a 22 20 74 6f 2d 70 6f 72 # omain="*" to-por
< 000000b0 74 73 3d 22 2a 22 2f 3e 3c 2f 63 72 6f 73 73 2d # ts="*"/></cross-
< 000000c0 64 6f 6d 61 69 6e 2d 70 6f 6c 69 63 79 3e       # domain-policy>
Цитата:
Однако консоль сервера показывает что файл не отдается при коннекте из флеша(из браузера ок)
В том коде я не вижу никаких отладочных сообщений на прием/отправку.
Цитата:
Консоль браузера же не выбивает ошибку безопасности:
А здесь я вообще не знаю, кто, как и где обрабатывает ту ошибку. Вот здесь вроде бы все ошибки сбрасываются в одну неразобранную кучу. Поэтому и вас FlashSocket.IO ничего хорошего не скажет.
Цитата:
Вопрос почему флешка ищет кроссдоменник здесь 5.187.4.231:8080 , также остаётся не понятным, даже если он не для сокета.
Видимо, потому, что FlashSocket.IO еще и по http/https куда-то ходит в самом начале.

Я вам рекомендую сначала разобраться с основами и поставить в качестве policy-file сервера мой. Или мой клиент попробовать с вашим policy-server'ом. И убедиться, что "на нижнем уровне" все работает. А затем выбросить библиотеки и написать свои транспорты для клиента и сервера на базе xmlsocket или socket. Это на самом деле проще и гораздо быстрее, чем разбираться в чужих библиотеках (т.е. если не заработало, то на "написать" времени нужно строго не больше, чем "исправить библиотеку"). Ну или сначала разобраться в основах, а потом смотреть, какие фреймворки/библиотеки можно взять (но это вам уже вряд ли захочется). Или вам так сильно нужно ручное управление proxy (только тогда имеет смысл смотреть что-то готовое)?

Старый 17.02.2013, 12:56
PeTa4eK вне форума Посмотреть профиль Отправить личное сообщение для PeTa4eK Найти все сообщения от PeTa4eK
  № 13  
Ответить с цитированием
PeTa4eK
 
Аватар для PeTa4eK

Регистрация: Jan 2007
Адрес: [1,1,1]
Сообщений: 135
Записей в блоге: 2
Отправить сообщение для PeTa4eK с помощью ICQ
На запрос от клиента <policy-file-request/>, ваш сервер должен отправить в ответ строку вашей политики безопасности. Например такой(с нулевым байтом на конце):
Цитата:
<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>\0
это даст доступ на любой домен и порты)
После отправки этого файла, клиент сам разорвет соединение и подключится заново уже полностью работоспособный.

Это вроде как все в документации есть.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
Это вроде как все в документации есть.
Это вроде бы и так всем ясно ) Неплохо бы тему для начала почитать, а потом уже и ответ придумывать

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

Регистрация: Apr 2009
Сообщений: 409
maxkar, спасибо, попробовал использовать ваш клиент:
Код AS3:
public function Test() {
	Security.loadPolicyFile("http://5.187.4.231:8080");
	sock = new XMLSocket("5.187.4.231", 8080);
	sock.addEventListener(Event.CONNECT, connected);
	sock.addEventListener(DataEvent.DATA, receive);
	addChild(tf);
  }
 
  private function connected(e : Event) : void {
    tf.text = "COnnected";
	sock.send(<test/>);
  }
 
  private function receive(e : DataEvent) : void {
  	tf.text = e.data.toString();
	sock.send(<quit/>);
  }
при этом сервер на socket.io:
Код AS3:
var chanel = require('socket.io').listen(8080); 
chanel.set('transports', [ 'flashsocket' ]);
chanel.set('flashPolicyServer',true);
chanel.set('log level', 2);
chanel.sockets.on('connection', function (socket) {
console.log('connect');
socket.on('message', function(msg){
console.log(msg);
if (msg=='<policy-file-request/>'){
chanel.send("<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>");
}
});
});
Но консоль сервера молчит как с локальной флешки так и из запущенной на сервере. При этом локально выбивает ошибку
Код AS3:
Игнорирование файла политики на "http://5.187.4.231:8080/" target="_blank">http://5.187.4.231:8080/ из-за отсутствия типа содержимого
Если же использовать в качестве сервера:
Код AS3:
var net = require('net'),
    sys = require('util');
 console.log("Secur server started");
var server = net.createServer(function(stream) {
	stream.setEncoding('utf8');
	stream.addListener('data', function(msg) {
	if (msg=='<policy-file-request/>'){
		var polic = "<cross-domain-policy><allow-access-from domain=\"*\" to-ports=\"*\"/></cross-domain-policy>"
		stream.write(polic);
		console.log('policeSend');
		}
		console.log(msg);
	});
 
});
server.listen('8080', '5.187.4.231');
то при запуске локально в консоль сервера пишется:
PHP код:
Secur server started
<test/>
GET HTTP/1.1
Accept
text/xmlapplication/xmlapplication/xhtml+xmltext/html;q=0.9text/plain;q=0.8text/cssimage/pngimage/jpegimage/gif;q=0.8application/x-shockwave-flashvideo/mp4;q=0.9flv-application/octet-stream;q=0.8video/x-flv;q=0.7audio/mp4application/futuresplash, */*;q=0.5
x-flash-version: 10,3,183,25
User-Agent: Shockwave Flash
Host: 5.187.4.231:8080 
А если с сервера, то:
PHP код:
GET HTTP/1.1
Host
5.187.4.231:8080
Connection
keep-alive
<policy-file-request/> 
Но коннект все равно не устанавливается.

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

Регистрация: Nov 2010
Сообщений: 497
Сравните:
Код AS3:
Security.loadPolicyFile("xmlsocket://127.0.0.1:3128"); // у меня
Security.loadPolicyFile("http://5.187.4.231:8080"); // у вас
Видите разницу в протоколах? Она существенна. Для сокетов протокол должен обязательно быть xmlsocket. По http/https грузятся политики для обычного содержимого (Loader, URLLoader).

Цитата:
Но консоль сервера молчит как с локальной флешки так и из запущенной на сервере.
А вот это я не знаю, почему. Судя по вашей локальной ошибке, в случае socket.io кто-то все-таки отдает содержимое файла политики. Причем не устанавливает ему content-type. Может быть, ваш сервер в лог ничего не пишет или перенаправление работает "не туда"? Или кто-то другой в то время на порту слушает? В общем, не совсем понятно, ваш ли это сервер (хотя бы connect должен в лог вывести) или нет. Если ваш, наверное, плеер ругается на "пустой ответ" (content-type, там, естественно, тоже нет). Но это все не важно, протокол в клиенте нужно другой указать.

И проверьте, во всех сообщениях (и на входе, и на выходе) в конце должен быть нулевой байт (\0 или как он в вашем языке записывается).

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

Регистрация: Apr 2009
Сообщений: 409
В общем таки добился успешной отправки файла политики и коннекта в лабораторных условиях.
клиент:
Код AS3:
	Security.loadPolicyFile("xmlsocket://5.187.4.231:843");
	sock = new XMLSocket("5.187.4.231", 8080);
	sock.addEventListener(Event.CONNECT, connected);
сервер:
Код AS3:
var pf = require('policyfile').createServer();
pf.listen(843, function(){console.log('policeSend')});
 
var net = require('net');
 console.log("Server started");
var server = net.createServer(function(stream) {
	stream.setEncoding('utf8');
	stream.addListener('data', function(msg) {
		console.log(msg);
	});
 
});
server.listen('8080');
Но теперь получается прийдётся переписывать и клиент и сервер, почему-то socket-io и FlashSocket.as оказались не совместимы, то ли я чего то недопонимаю... Дело в том, что XMLSocket и socket.io не дружат, так же как и net.createServer с FlashSocket.as в связи с разными handshaking , в свою очередь XMLSocket и net.createServer , помимо того что требуют переписывания, клиента и сервера, еще и имеют совершенно другие принципы работы(не передают json, из server нет доступа к отдельным стримам, добавлять везде нулевые байты). То есть всё таки очень желательно заставить работать именно связку flashSocket.as с Socket.IO.
Не могу понять почему если с XMLSocket Security.loadPolicyFile("xmlsocket://5.187.4.231:843"); подключение идет номрально, а с FLASHSocket нет, ведь принцип должен быть тот же самый и те же порты. сервер socket.io:
Код AS3:
var chanel = require('socket.io').listen(8080); 
chanel.set('transports', [ 'flashsocket' ]);
chanel.set('flashPolicyServer',true);
chanel.set('log level', 2);
chanel.sockets.on('connection', function (socket) {
console.log('connect');
socket.on('message', function(msg){
console.log(msg);
});
});

Старый 21.02.2013, 02:26
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 18  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Цитата:
Не могу понять почему если с XMLSocket Security.loadPolicyFile("xmlsocket://5.187.4.231:843"); подключение идет номрально, а с FLASHSocket нет, ведь принцип должен быть тот же самый и те же порты. сервер socket.io
А чего у вас сервер на wget --post-data="" http://5.187.4.231:8080/socket.io/1/?time=123 ничего не отвечает (за разумное время, мне ждать надоело)? Там что-то интересное должно быть. Ведь у вас же есть исходный код этого FlashSocket.as. А там черным по белому написано, что он на подобный адрес по http ходит и чего-то интересного оттуда хочет (парсит ответ, чего-то выдирает и т.п.). Да и используемая этим FlashSocket.as библиотека (какой-то websocket) тоже имеет исходники и они доступны. В общем, дальше обычный процесс отладки чужого кода. При необходимости - его правка, вставление трейсов и т.п.

Цитата:
помимо того что требуют переписывания, клиента и сервера
Так в норме это вообще копейки. Транспорт поменять. По большей части на клиенте это ровно один метод при правильной архитектуре (максимум - два, инжектятся везде, где нужно). Для сервера на транспортном уровне тоже разница не слишком большая. И json можно через xmlsocket передавать. Он только называется XML, а передаются строки. Ну да, в транспортах придется в/из json конвертировать. В общем, это тоже не такая большая беда (там пара десятков строчек будет на каждой стороне, и это уже с обработкой ошибок парсинга json).

Использование сторонних библиотек может быть сильно не просто. Его нужно аккуратно продумать. Вот вдруг там где-то внутри в определнном сценарии какие-то баги обнаружатся. Что будете делать? Поменять у вас вроде архитектура так просто не позволяет. Отлаживать? Можно потренироваться уже сейчас .

Старый 21.02.2013, 13:47
faraday вне форума Посмотреть профиль Отправить личное сообщение для faraday Найти все сообщения от faraday
  № 19  
Ответить с цитированием
faraday
 
Аватар для faraday

Регистрация: Apr 2009
Сообщений: 409
Переписывать транспорт конечно вариант, но это уже на крайни случай, и судя по этому, заставить работать их все таки можно:
http://stackoverflow.com/questions/1...93590#14093590
http://stackoverflow.com/questions/1...with-socket-io

http://5.187.4.231:8080/socket.io/1/?time=123 не отвечал так как серв был отключен, сейчас ок, возвращает
Код AS1/AS2:
4677074091530925175:60:60:websocket,flashsocket
Как выяснилось у socket.io есть директива установки police server port, которая по умолчанию выставлена в 10843, изменил вручную, и теперь сервер сократился до:
Код AS3:
var chanel = require('socket.io').listen(8080); 
chanel.set('transports', ['websocket','flashsocket']);
chanel.set('flash policy port', 843);
chanel.sockets.on('connection', function (socket) {
console.log('connect');
});
но по прежнему глухо, хотя теперь http://5.187.4.231:843 по идее файл политики должен возвращаться точно правильный.
Просмотрел библиотеки FlashSocket и WebSocket в каждом из них есть запрос фала политик и оба xmlsocket://5.187.4.231:843 правильные. хотя здесь https://github.com/simb/web-socket-js что-то сказано про 10081 порт.

Старый 21.02.2013, 21:19
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 20  
Ответить с цитированием
maxkar

Регистрация: Nov 2010
Сообщений: 497
Так... Возвращаемся к
Цитата:
Но при загрузке флешки firebug показывает запрос файла с порта 8080, к которому конектится сам flashSocket, на что получает ответ "Welcome to socket.io."
Вот "welcome to socket.io" на crossdomain.xml неправильно . Там таки должен быть валидный crossdomain.xml для loader/urlloader. Внутри ничего сложного не нужно (т.е. он вполне обычный). Там сейчас происходит следующее:
* Запрос http://5.187.4.231:8080/crossdomain.xml
* Запрос на http://.../socket.io/1/?time=...
* Запрос на socket policy
* Запрос на соединение
Пункт 1 выполняется в момент программного запроса из п. 2 (это в коде FlashSocket). Пункт 3 может, выполняется вами вручную или автоматически в результате п. 4. Т.е. без loader/urllloader цепочка дальше не работает. Да, вам нужно два crossdomain. Один выдается по http (на порту 8080, обычным http-server'ом), второй - как socket policy file socket-сервер'ом. Ну и дальше можно обычные соединения отлаживать/тестировать/смотреть.

Вообще, попробуйте все-таки сами собрать и подобавлять отладку во FlashSocket (т.е. ответы на IOError/SecurityError). Так будет быстрее. И ошбики будет проще отслеживать (про crossdomain.xml на 8080 я далеко не сразу подумал, а вот с сообщением про security error все бы стало ясно).

Создать новую тему Ответ Часовой пояс GMT +4, время: 04:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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