![]() |
Flash->Socket->PHP Альтернативы
Добрый день.
Нужно сделать связь флэш приложения запускаемого с сервера и пхп скрипта дергающего для этого приложения данные из базы. (проект тестовый, для саморазвития, флэшем серьезно занимаюсь недавно). Заранее спасибо. Итак вопросы: 1. Правда ли что для успешного коннекта с сервером через класс Socket нужно чтобы сервер был выделенным? В мануалах я такого утверждения не нашел, но на этом форуме пару раз что-то подобное видел. Должен ли работать такой сокет с виртуальным хостом (локальный апач или арендованный хостинг скажем на sweb)? 2. Если приложение (файл swf) и скрипт пхп (index.php) лежат на сервере, и даже в одной папке (например, рут хоста), нужны ли для работы сокета какие-то дополнительные меры по настройке секьюрити (использование allowDomain или loadPolicyFile)? Я так понял что нет. Т.к. в мане для сокета указано: - Data loading is not allowed if the calling SWF file is in the local-with-file-system sandbox and the target resource is from a network sandbox. (не наш случай) - Data loading is also not allowed if the calling SWF file is from a network sandbox and the target resource is local. (тоже не наш случай) - The calling SWF file and the network resource being accessed must be in exactly the same domain. For example, a SWF file at adobe.com can connect only to a server daemon at adobe.com. (это как раз наш случай !) - Websites can permit cross-domain access to a resource through a cross-domain policy file. (тоже не наш случай) Т.е. все главные требования выполняются. 3. Я выполнил тестовый пример коннекта сокета на основе примера из мануала (Flash Help -> class Socket), он работает только при компиляции в среде и при компиляции в ехе файл. Все мои попытки запустить swf на сервере ни к чему не привели. Ошибок секьюрити не выдает. snadbox пишет REMOTE. Все должно быть нормально. Все тесты показали, что останавливается именно на шаге коннекта к серверу, объект самого сокета создает, а событие на коннект не срабатывает. Какие могут быть ошибки? 4. Есть еще какие-нибудь способы установки соединения с пхп, кроме сокета, чтобы можно было общаться на уровне хттп запросов, или примерно таком же низком уровне данных. Желательно обойтись без промежуточных XML файлов. |
LoadVars
|
Цитата:
А если писать все на АС3, то, судя по ману, нужно использовать URLLoader. Мне этот метод не очень удобен, т.к. он диктует формат организации данных. |
komar, пожалуйста объединяйте друг за другом следующие сообщения, для этого есть кнопка «изменить».
|
Цитата:
|
Socket флэша предназначен для взаимодействия с сокет-сервером. и не просто с сокет-сервером, а с таким, который умеет "понимать" протокол класса XMLSocket. т.е. сокет-сервер - это отдельное приложение, которое крутится на хосте, слушает клиентов и т.д.
во флэше (8) класс именуется XMLSocket - это не спроста. почему? как вы думаете? я не совсем понял выражения Цитата:
зачем вы на сервере запускаете swf? и как вам это вообще удается? или вы владелец хоста? swf запускается и выполняется на стороне клиента, а через сокет осуществляется связь с сервером. на то оно и клиент-серверное приложение. или я чего-то не понимаю. |
Цитата:
2. сокет-сервер нужен для обоих классов Socket и XMLSocket 3. Где берутся или как пишутся сокет-серверы? Цитата:
Цитата:
Цитата:
Выражение "открываю с сервера" я использую, потому что хоть swf файл и качается на клиента, в sandbox`e пишется уже не LocalWithNetwork или LoacalwithFile а REMOTE. т.е. пример работы как раз описанный в хелпнике: The calling SWF file and the network resource being accessed must be in exactly the same domain. For example, a SWF file at adobe.com can connect only to a server daemon at adobe.com. |
и что вам не ясно?
http://www.flasher.ru/forum/showthread.php?t=92951 о security во флэше Цитата:
Цитата:
Цитата:
http://flasher.ru/forum/archive/index.php/t-86289.html Вобщем, примерно так: Socket - это сокет: XMLSocket на клиенте, сокет-сервер на хосте. PHP - это PHP: LoadVars на клиенте, PHP на хосте. они и есть друг другу альтернатива. Есть еще FlashRemoting, AMFPHP про них почитайте. но это не альтернатива в полном смысле, а вариант. Что применять - дело конкретной задачи. Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
У меня складывается впечатление что мы говорим немного о разных вещях. Вы уже второй упоминаете XMLSocket.
Я же говорю о классе Socket. Класс из AS3 Flash 9. flash.net.Socket Не знаю как еще объяснить. Т.е. речи об XML не идет. >> http://www.flasher.ru/forum/showthread.php?t=92951 По сслылке что вы дали, речь идет о локальных(!) настройках, и настройках для конкретного клиента. Это здесь никак не применимо. А правила безопасности ("...Вам необходимо соблюсти все правила безопасности флеша (crossdomain.xml и т.п.) для публикации на сервере, чтобы не получить в дальнейшем проблем с загрузкой данных...") здесь как я считаю соблюдены, как раз на основании документации к Flash 9. Речь об этом. Я описал организацию и размещение swf файла, сервера и скриптов с которыми он должен связываться. И спрашиваю: - действительно ли не нужно дополнительных прав для флэшки; - почему флэшка не может открыть сокет с сервером; - с слову о сокет-серверах, на апаче по идее по умолчанию стоит сокет сервер, который слушает 80 порт, иначе как идут хттп запросы на 80 порт. |
> почему флэшка не может открыть сокет с сервером;
Берешь сниффер и смотришь, чего реально происходит > на апаче по идее по умолчанию стоит сокет сервер Апач - это и есть сокет-сервер. Он же httpd(2) |
Цитата:
с КАКИМ сервером флэшка не может окрыть соединение? зачем СОКЕТОМ "лезть" в ПХП-скрипт? вы мне это можнте объяснить, что это вообще такое? потом, запросы запросами, а ответы кто давать будет? тоже апач? ну так пробуйте завести сокет на <ip>:<port> вашего апача. что получится? если получится - что дальше? LinuxVideo, слушать можно все что угодно и чем угодно, сниффером, tcpdump-ом, демоном из 20-ти строк на перле, апачем :), дальше что? услышали, и .... ? человек хочет из базы данные во флэш по сокету сбрасывать, например. кто это будет делать? демон из 20-ти строк? тогда чем этот вариант лучше PHP+LoadVars? дались вам эти сокеты, ейбогу. ну пусть... апач-это сокет, запрос апачу отсылаем LoadVars-ом (URLRequest-ом) типа "http://....page.php?param1...¶m2=...." апач, увидев, что клиент хочет php, запускает скрипт page.php, который лезет в базу, дергает данные, формирует ответ. апач отсылает ответ флэшу. чем не сокет? :) чем вас не устраивает такая незаурядная в своей простоте схема? повторюсь, если ищете "особых" решений - юзайте сокет. он вам будет давать те же ответы без участия апача и пхп, если вы сумеете его заставить это делать конечно. |
Цитата:
Цитата:
Цитата:
Щас уже просто из принципа хочут понять почему не открывается сокет. + в сокете данные передаются в сыром виде, это открывает широкие возможности для развития. + можно прикрутить различные форматы передачи данных (тотже JSON) |
komar, если флешка работает не через хттп, а через сокет (а ведь ты надо полагать хочешь юзать XMLSocket) - то файл этот надо получить тоже из сокета. Когда флешка коннектится к серверу - она запрашивает этот файл (не помню как - посмотри в выводе сокета), и по этому запросу файл надо отдать.
Если писать сокет на питоне или ему подобных - то обрати вниманиена символ номер 27: так флеш говорит, что передача окончена Пхп для таких вещей не пригоден - он как и хтмл только для текстов (питон полгода назад тоже был, он не поддерживал закрытие тредов - но может сокеты там уже дописали) Апач - это действительно сокет, но тебе нужен сокет который работает по твоим правилам, а в апач писать могут только очень взрослые дяди с большим пузом и бородой Хостинг нужен выделенный, лучше колокейшн - потому что все что выше апача на стартовых тарифах не работает |
по-моему у автора тут вообще недопонимание некоторое есть. сокет-клиент соединяется не со скритом http://www.test.ru/index.php. он соединяется с ip-адресом по такому-то порту. на машине по этому адресу должен стоять сокет-сервер, который слушает этот порт. после установки соединения клиент общается с сервером с помощью протокола сервера. если ты приконектишся к апачу по его стандартному порту :80 то общаться тебе с ним нужно на HTTP. для своей игры/интерфейсу к базе/что-то другое тебе нужно будет написать свой сокет-сервер. это достаточно сложно даже на пхп (ненадо, кстати, ля-ля, что на пхп сокет-серверы не пишут. с мемкешем и оптимайзерами спокойно держат больше 400 юзеров). к локальному апачу локальная флешка с сокет-клиентом подключаться должна. если этого не происходит - у тебя ошибка где-то.
сырые сокеты нужно использовать только когда для тебя критично важно время отклика и нагрузка на сервер(к тому же для сокета тебе понадобится виртуалньый хост с ssh, доступом к cron, etc...) если нет - используй XML.sendAndLoad или LoadVars. пример XML.sendAndLoad я недавно писал: http://www.flasher.ru/forum/showpost...57&postcount=8 |
Люди, откуда пошло это извращенное "сокет-сервер"? Мне читать вас больно, режет глаз. Это как масло-маслянное.
http://ru.wikipedia.org/wiki/%D0%A1%...5%D0%B9%D1%81) http://ru.wikipedia.org/wiki/%D0%A1%...B2%D0%B5%D1%80 http://ru.wikipedia.org/wiki/%D0%A1%...0%BB%D1%8C_OSI Цитата:
Цитата:
Цитата:
У меня еще и волосы длинные. Цитата:
Цитата:
Цитата:
|
Цитата:
И разреши заметить, что это выражение ты тут сам употреблял и расшифровывал не дале как вчера. Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
***Теперь и я к свовам прие&ался. LinuxVideo, ваш дурной пример заразителен... |
та что за глупости: "народный фольклор ". это нормальное употребляемое слово. если не совру, то в Delphi стандартные компоненты так и назывались: Socket-client, Socket-server. это исключительно юниксоиды используют словечки типа демон, скелетон и т.д. с подачки некоторых авторов.
|
Цитата:
Цитата:
Цитата:
Лучше "TCP-приложение, принимающее входящие соединения". Прошу прощения за оффтоп. |
Эх. Тут в одну корзину уже накидали все что можно, даже крон приплели.
Давайте с начала. 1. Речь определенно идет о AS3, и его новом классе Socket. В AS2 его насколько я знаю нет. Отличается от XMLSocket и подобных ему, что предназначен для простого соединения с сервером без установки всяких стандартов передачи данных (как например в XMLSocket формат = XML). В классе Socket создается только сам сокет (канал с сервером), а дальше в этом канале уже делай что хочешь. (для начала просто пишешь руками HTTP запросы http://www.javable.com/columns/serv_...%3F%3F%3F+POST - кому интересно). Т.е. можно передавть данные в бинарном виде, в тексте (UTF) и т.д. Короче полная свобода. Еще раз, XMLSocket тут вообще ни причем. Он даже работает немного по другому, и параметром у него раза в 2-3 меньше. 2. Сокет-сервер - разновидность Демона (Daemon - http://ru.wikipedia.org/wiki/%D0%94%...0%BC%D0%B0%29), как раз программа (фоновой процесс, если на уровне сервера) которая запускается на сервере (имеется ввиду машина) автоматом и слушает порт, например. 2.1 Сокет - на программном уровне - интерфейс. Т.е. набор правил и команд позволяющий клиенту (в нашем случае, в общем случае и серверу) соединяться с сервером. Т.е. модель/способ/правила/интерфейс (кому как понятнее) соединения с сервером. В данном случае открытие канал связи. http://ru.wikipedia.org/wiki/%D0%A1%...D0%B9%D1%81%29 3. Обычные (на уровне пользователя) серверы на которых размещаются сайты, в том числе и этот, это и есть сокет-серверы. Помимо сокет-серверов есть другие типы Демонов (к ним уже относится упомянутый cron, который занимается "фоновой" планировкой и выполнением различных задач, на сколько я знаю на основе cron`ов работают различные боты, которые время от времени сканят какие-либо ресурсы = плнарование и выполнени - просто пример). 4. Апач - сокет-сервер на UNIX системе (есть различные виндовые сокет-серверы, с ними особо не знаком) настроенный на 80 конкретно. Т.е. он специально предназначен для хттп протоколов, которые являются стандартом для 80 порта. На апаче стати и ваш сайт стоит :) И вот открытие страниц, например http://www.flasher.ru происходит как раз по средством сокета (канал), который открывается на 80 порту, и при обмене информации в запросах используется http протокол. 5. Т.е. апачу поверх сокет-серверы не нужен поидее. Если только появится желание заставить апач слушать не только 80 порт, а еще какой-то. То для этого порта нужно писать дополнительный сокет-сервер (надстройка, приложение например на пхп), который будет настроен именно на этот новый порт. Писать такие сокет-серверы (настройки) на пхп говорят не сложно, мне если не по силам, то есть кто это сделает. Так что если в этом будет дело - напишем. ------- Таким образом происходит типичная подмена понятий. Вообще слово "сокет" используется много где, и языках программирования и в терминологии сети и в том же АS. ------- Речь идет о классе Socket, который из флэшки (файла swf) должен открывать сокет (канал) с сервером (апач=сокет-сервер), по определенному домену и порту (для апача это 80 порт). О форматах передачи данных и запросах, и всем остальном пока речи не идет. Пока что все встает на этапе коннекта и открытия сокета (канал). Т.е. до скрипта к которому должен идти хттп запрос дело даже не доходит. Все-таки думаю стоит вам посмотреть описание класса Socket. ------- Выкладываю все-таки часть кода: Код:
package {все видим что стоят листенеры на события сокета(как канала), вот my_socket.addEventListener(Event.CONNECT, connectHandler); это событие не отрабатывается. Следовательно коннекта по какой причине не происходит. Размещение всех файлов участвующих в процессе я описал. По идее все правила безопасности соблюдены. Пример работает если его запускать из exe файла, и раотает если его запускать из среды флэша. Также он работает на виндовом сервере IIS 6.0 и локально и удаленно. |
LinuxVideo - супер.
а теперь, если вас не затруднит, LinuxVideo - ваше решение проблемы автора. задача. используя стандартный флэш-клиент, осуществить соединение с сервером, передать/получить данные в удобном для автора формате (вариант - JSON). при этом предполагается, что данные могут либо должны заносится/выниматься в/из базу(ы). ..... решения на основе LoadVars/XML.sendAndLoad+PHP/Perl не предлагать :). ..... хорошо бы без терминологических опусов. просто те самые 20 строчек кода, для начала. ..... (добавлено) komar, ок. теперь все встало на свои места. почему бы было не назвать топик типа "Не работает то-то и то-то (AS3)" и не понуждать всех угадывать то что вам действительно нужно? |
komar, http-протокол разрывает соединение сразу после обмена данными, и вообще хз как реагирует на не-браузеры, апач по идее ждет - потом нах шлет, че делает IIS науке вообще не известно, флешу это не нравится, пиши отдельный сервер
А вообще чтобы вкурить тему - напиши сначала консольный клиент (ну или сп*зди откуда-нибудь, опен-соурс нынче популярен), подолбись им на 80й порт - и внимательно подумай над тем что он тебе расскажет |
> http-протокол разрывает соединение сразу после обмена данными
keep-alive > просто те самые 20 строчек кода, для начала. Код:
#!/usr/bin/perl -TwИз примера выкинуто немного, зато в 20 строк уложился. |
хорошо что всем (надеюсь всем) всё стало понятно.
Я хотел сначал добавить эту тему в раздел про АС3, но считаю все-таки что дело не сколько в работе класса Socket, сколько в модели общения с сервером. Т.е. как раз "другие технологии" + уточню. Сейчас меня пока не интересует передача/получение данных, если будет сокет (канал) я это смогу осуществить. пхп на стороне сервера (работа с БД) тоже в принципе решено. Дело именно в коннекте. Т.е. варианты какие у меня наварились в течении этой недели: 1. Проблема с настройками сервера (админы и хостеры говорят что проблем быть не может) 2. Проблема с правилами безопасности (вохможна, хотя по манам не должно быть), и + не выдается никаких ошибок безопасности. На них тоже стоят листенеры. 3. Проблема правом коннекта к апачу для сторонних приложений (swf вместо броузера), хотя exe коннектится даже с локалки. 4. Ограничения коннекта в самом броузере (например, броузер не дает содержимому страницы осуществлять коннект в обход броузера). 5. Настройки флэшки на адобе (manager) и подобное не применимо поидее. 6. Видел мнение, что нужны выделенные серверы. Что мол на виртуальный хост коннект не получится. По-моему чушь, т.к. запросы страниц идут через такие же каналы. 7. Есть мнение что права коннекта могут зависеть от типа вставки swf в хтмл страницу. Т.е. обжекты, эмбеды и т.д. + часто многие используют яваскрипт для интерпретации флэшек (обычно для ИЕ, т.е. в нем баг, и сами микросовтовцы распространяли пример функций, как надо в для ИЕ вставлять флэшки). |
> Проблема с настройками сервера (админы и хостеры говорят что проблем быть не может)
Бери сниффер и смотри. Приходит ли вообще хоть чего-то, чего в ответ. > По-моему чушь, т.к. запросы страниц идут через такие же каналы. совершенно верно |
Цитата:
Цитата:
Цитата:
Но стобы этим пользовать нужны спец знания, которых у меня нет. А вопрос был задан с расчетом, что кто-то пользовался классом Сокет, или сталкивался с подобными проблемами. Ответы типа "возми то-то, догадайся сам" по-моему не для форума, где должны помогать решать задачи. Цитата:
|
Тваюжмать! Не услышишь ты ничего от 80го порта!
http://www.scribd.com/doc/134861/Soc...ng-with-python - описание http://python.active-venture.com/lib...t-example.html - питон эхосервер А с хостингом у тебя большие проблемы - во первых виртуальный, во вторых винда, в третих иис. Полный комплект суррогатных серверных технологий, которые непонятно через какую ж работают (админы сами не знают - вот и шлют тебя нах и идут пить пиво). Выделеный сервер - это тво ип, твоя строка, твой сервер - че хош то и вешай, а виртуальный - это один большой компутер и много сайтов, сайт выдается взависимости от заголовка (грубо говоря от того, что ты напишешь в адресной строке браузера) и пока заголовок не пришел - он [сервер] будет очень тактично молчать. Итог: 1. Кто не платит идет - идех нах, закон жизни, в том числе и хостерской. 2. Проблема есть, решение выше 3. Опции компиляции проверь, чтобы было написано что-то вроде "4network" 4. Дает 5. Мысль не понял 6. Мнение обьективно (см п.1) 7. Таких проблем не встречал, ничо сказать не могу |
Цитата:
|
2grunerasta:
ты сама не втеме. Я сокет юзаю для создания канала (это его прямое назначение, а оставлять его открытым или закрывать после обмена данными, это отдельная темы. И как прально LinuxVideo сказал, это прописывается в хедере запроса) между флэшкой и сервером, меня твоя биржа не интересует. С хостингом у меня все впорядке. Щас тока раз ты тут ляпнул что-то, побегу выделенный покупать. Ага. Уже две страницы речь идет об Апаче на линуксе. Про иис упомянул один раз - на нем были тесты, там все работает. От виртуальности хостинга работа сервера зависеть не должна, он как слушал порт, так и слушает. + даже если, как ты говоришь, на простой коннек ответа идти не должно (типа там сервер плохой, бла бла бла) - пробовали и запросы отправлять, разницы никакой. + коннект проходит, и запросы проходят, и даже отрабатывается скрипт. Если флэшка компилеца из среды или из ехе (уже ни раз писал). Так что о невозможности коннекта, ваще ниче слышать не хочу. Он возможен, но где-то сидит косяк. :( Ответ, типа пади питон изучи, и не мудись с флэшем очень в тему ;) +1 на счет "итог:"`а, тоже улыбнуло. Опять все сводится к тому, что чтобы swf работал как описано в мане к нему (флэшу), надо ставить до*я приблуд, знать еще кучу языков, самому написать сервер и т.д. :) ----- Еще к слову. 3. Опции компиляции проверь, чтобы было написано что-то вроде "4network" Эта опция нужна чтобы устанавливать настройки для флэшек запущенных локально. Почему локально? Объясняю. Есть такое понятие sandbox. В мане описано подробно. Оно управляет базовыми правилами безопасности, и определяется в основном локацией флэшки. Т.е. это система (предположительно файловая, в которой флэшка и лежит) + приложение которое открывает флэшку = отношение между ними. Если флэшка запускается локально (напрямую в плэйере, или через броузер, но локально) у нее может быть два статуса: - localWithNetwork (свобода действий в свой локали, допустим выход в интернет, но там уже надо соблюдать правила безопасности, и обычно кроссдоменности) - localWithFile (только локально) Значения думаю понятны. Вот выбор из них как раз и определяют настройки компиляции. Соответственно если оставить то что стоит по-умолчанию, мы получим localWithFile. Когда флэшка запускается по УРЛ с сервера (даже если мы запускаем хтмл страницу, в которой флэшка), то полюбому влэшка получает статус REMOTE. Означает что влэшка в рамках своего домена свободна в действиях, и работает по правилам безопасности домена (хоста, сервера). + в описании класса Sокет, указано: Data loading is not allowed if the calling SWF file is in the local-with-file-system sandbox and the target resource is from a network sandbox. Data loading is also not allowed if the calling SWF file is from a network sandbox and the target resource is local. Недопустимые "песочницы" видим. Наша флэшка под это не подпадает. + есть четвертый вариант sandbox`a : localTrusted. Как я понял - ваще полнейшая свобода. Такой статус флэшка получает при компиляции в среде флэша, и при компиляции в exe файл. (как раз те случаи, в которых коннект срабатывает). |
Ув. админы. Специально пишу отдельным постом.
Измените пожста название темы (как самому сделать не нашел). Т.к. разговор уже ушел в другое русло (про альтернативы закончили, речь о классе Socket из AS3, и его коннекте с сервером), а новую тему открывать нет смысла. |
> К этому все идет. Снифер я нашел, терь ищу кто мне с ним работать поможет. А то он больно навороченный.
Бери Ethereal (его продолжение вайршарк не пользовал), там все просто, правый клик на пакете - follow tcp stream. Очень удобно разбирать дампы > Выделеный сервер - это тво ип, твоя строка, твой сервер - че хош то и вешай Виртуальный дедик - все идентично. Только цена значительно ниже. > сайт выдается взависимости от заголовка Так сложно прописать слово host в заголовок? Уж если делаем работу с http, то надо бы почитать rfc2616, а то можно уйти еще дальше, что сокет-серверы будут простой шалостью. |
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Сокет узается для коннекта с сервером - по прямому назначению. Цитата:
Цитата:
|
Цитата:
Ты где увидел слово бизнес блин. Открой первую страницу темы, умник, и читай. По буквам, может тогда в твой моск загрузится информация из этой темы. |
Цитата:
|
Цитата:
|
Комар, какой сокет ? Ты о чем ?! sendAndLoad используй. И будет тебе счастье.
сначала проверку login/pass с базой делай, потом создай сессию и все. Зачем себе так мозги грузить по ерунде? Нужна будет помощь - все расскажу. пиши: ulik@lp-design.ru |
komar, Нашел тему и понял что мне в ближайшее время придется столкнуться с аналогичной проблемой. Знаю что прошло много времени, но мне интересно как решилась эта проблема? Или может кто-нибудь из других участников дискуссии знают решение. Нужно именно socket соединение. Но порт будет другой прослушиваться, сервак будет на vb.net.
|
| Часовой пояс GMT +4, время: 21:10. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.