Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Серверные технологии и Flash (http://www.flasher.ru/forum/forumdisplay.php?f=62)
-   -   Flash->Socket->PHP Альтернативы (http://www.flasher.ru/forum/showthread.php?t=103931)

komar 15.11.2007 13:59

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 файлов.

alexcon314 15.11.2007 14:45

LoadVars

komar 15.11.2007 15:11

Цитата:

Сообщение от alexcon314
LoadVars

Так, спасибо. Но это ответ только на 4 вопрос. Мне бы еще хотелось все-таки узнать мои ошибки/заблуждения по остальным вопросам.

А если писать все на АС3, то, судя по ману, нужно использовать URLLoader.
Мне этот метод не очень удобен, т.к. он диктует формат организации данных.

screamge 15.11.2007 15:28

komar, пожалуйста объединяйте друг за другом следующие сообщения, для этого есть кнопка «изменить».

komar 15.11.2007 16:24

Цитата:

Сообщение от screamge
komar, пожалуйста объединяйте друг за другом следующие сообщения, для этого есть кнопка «изменить».

Прошу прощения. Буду аккуратнее.

alexcon314 15.11.2007 18:09

Socket флэша предназначен для взаимодействия с сокет-сервером. и не просто с сокет-сервером, а с таким, который умеет "понимать" протокол класса XMLSocket. т.е. сокет-сервер - это отдельное приложение, которое крутится на хосте, слушает клиентов и т.д.
во флэше (8) класс именуется XMLSocket - это не спроста. почему? как вы думаете?
я не совсем понял выражения
Цитата:

Нужно сделать связь флэш приложения запускаемого с сервера и пхп скрипта ...
...мои попытки запустить swf на сервере
...Я выполнил тестовый пример коннекта сокета на основе примера из мануала (Flash Help -> class Socket), он работает только при компиляции в среде и при компиляции в ехе файл. Все мои попытки запустить swf на сервере ни к чему не привели.
какой пример? как он у вас работает? у меня ни один не работает.
зачем вы на сервере запускаете swf? и как вам это вообще удается? или вы владелец хоста?
swf запускается и выполняется на стороне клиента, а через сокет осуществляется связь с сервером. на то оно и клиент-серверное приложение. или я чего-то не понимаю.

komar 15.11.2007 18:44

Цитата:

Socket флэша предназначен для взаимодействия с сокет-сервером. и не просто с сокет-сервером, а с таким, который умеет "понимать" протокол класса XMLSocket. т.е. сокет-сервер - это отдельное приложение, которое крутится на хосте, слушает клиентов и т.д.
1. Почему об этом не сказано в описании класса? это к слову
2. сокет-сервер нужен для обоих классов Socket и XMLSocket
3. Где берутся или как пишутся сокет-серверы?

Цитата:

во флэше (8) класс именуется XMLSocket - это не спроста. почему? как вы думаете?
очевидно обмен информации происходит в формате XML

Цитата:

какой пример? как он у вас работает? у меня ни один не работает.
Откройте в 9м флэше F1 помощь, найдите описание класса Socket там в конце есть пример работы сокета. Вот этот пример, только немного апгрейденый. Смысла его выкладывать я не вижу, он длинный и моего там ничего нет. Если надо, то выложу.

Цитата:

зачем вы на сервере запускаете swf? и как вам это вообще удается? или вы владелец хоста?
swf запускается и выполняется на стороне клиента, а через сокет осуществляется связь с сервером. на то оно и клиент-серверное приложение. или я чего-то не понимаю.
ну на сервер кладется index.html страница, на которой размещен index.swf, и открываю его www.test.ru/index.html . Т.е не локально. Коннектится флэшка должна на хост www.test.ru , и общаться со скриптом www.test.ru/index.php

Выражение "открываю с сервера" я использую, потому что хоть 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.

alexcon314 15.11.2007 22:21

и что вам не ясно?
http://www.flasher.ru/forum/showthread.php?t=92951
о security во флэше
Цитата:

очевидно обмен информации происходит в формате XML
вот именно. какой другой формат данных вы туда хотите запихнуть и как (и зачем?!)?
Цитата:

To use the XMLSocket class, the server computer must run a daemon that understands the protocol used by the XMLSocket class. (Flash8 Help)
Цитата:

Где берутся или как пишутся сокет-серверы?
пишутся на C++, Perl, C# и т.п.. берутся в сети (примеры, обсуждения, исходники), даже на этом форуме. Вот навскидку:
http://flasher.ru/forum/archive/index.php/t-86289.html

Вобщем, примерно так:
Socket - это сокет: XMLSocket на клиенте, сокет-сервер на хосте. PHP - это PHP: LoadVars на клиенте, PHP на хосте. они и есть друг другу альтернатива.
Есть еще FlashRemoting, AMFPHP про них почитайте. но это не альтернатива в полном смысле, а вариант.
Что применять - дело конкретной задачи.
Цитата:

Нужно сделать связь флэш приложения запускаемого с сервера и пхп скрипта дергающего для этого приложения данные из базы.
вам, судя по этой формулировке, подошел бы PHP и LoadVars, о чем я и упомянул. ищете "особых" решений для данной задачи - юзайте сокет.

LinuxVideo 15.11.2007 22:36

Цитата:

Правда ли что для успешного коннекта с сервером через класс Socket нужно чтобы сервер был выделенным?
Бред. Сервер, к которому коннектишься, должен тупо слушать порт. На простых хостингах висит httpd на 80, на выделенных можно своих демонов пускать. Виртуальные дедики по 20 баксов.

Цитата:

Должен ли работать такой сокет с виртуальным хостом (локальный апач или арендованный хостинг скажем на sweb)?
Легко. А какая ему разница?

Цитата:

Все мои попытки запустить swf на сервере ни к чему не привели.
Сервер тотже, на котором и лежит swf? crossdomain? Посмотри сниффером, чего происходит.

Цитата:

останавливается именно на шаге коннекта к серверу
Сниффером смотри

Цитата:

Socket флэша предназначен для взаимодействия с сокет-сервером
А в свою очередь сокет-сервер - это любой демон, который висит на порту. На перле демон пишется за 20 строк.

Цитата:

Где берутся или как пишутся сокет-серверы?
Берется учебник по сетевому программированию, где все это описывается. На (почти) любом языке программирования.

Цитата:

Есть еще FlashRemoting, AMFPHP про них почитайте
Читал. Так и не понял, для чего они, если есть raw socket

komar 15.11.2007 22:46

У меня складывается впечатление что мы говорим немного о разных вещях. Вы уже второй упоминаете 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 порт.

LinuxVideo 15.11.2007 23:08

> почему флэшка не может открыть сокет с сервером;

Берешь сниффер и смотришь, чего реально происходит


> на апаче по идее по умолчанию стоит сокет сервер

Апач - это и есть сокет-сервер. Он же httpd(2)

alexcon314 15.11.2007 23:48

Цитата:

- действительно ли не нужно дополнительных прав для флэшки;
- почему флэшка не может открыть сокет с сервером;
- с слову о сокет-серверах, на апаче по идее по умолчанию стоит сокет сервер, который слушает 80 порт, иначе как идут хттп запросы на 80 порт.
какие такие права дополнительные? если скрипт в том же домене то все должно ездить.
с КАКИМ сервером флэшка не может окрыть соединение?
зачем СОКЕТОМ "лезть" в ПХП-скрипт? вы мне это можнте объяснить, что это вообще такое?
потом, запросы запросами, а ответы кто давать будет? тоже апач? ну так пробуйте завести сокет на <ip>:<port> вашего апача. что получится? если получится - что дальше?
LinuxVideo, слушать можно все что угодно и чем угодно, сниффером, tcpdump-ом, демоном из 20-ти строк на перле, апачем :), дальше что? услышали, и .... ?
человек хочет из базы данные во флэш по сокету сбрасывать, например. кто это будет делать? демон из 20-ти строк? тогда чем этот вариант лучше PHP+LoadVars?
дались вам эти сокеты, ейбогу.
ну пусть...
апач-это сокет,
запрос апачу отсылаем LoadVars-ом (URLRequest-ом) типа "http://....page.php?param1...&param2=...."
апач, увидев, что клиент хочет php, запускает скрипт page.php, который лезет в базу, дергает данные, формирует ответ.
апач отсылает ответ флэшу.
чем не сокет? :) чем вас не устраивает такая незаурядная в своей простоте схема?
повторюсь, если ищете "особых" решений - юзайте сокет. он вам будет давать те же ответы без участия апача и пхп, если вы сумеете его заставить это делать конечно.

komar 16.11.2007 00:10

Цитата:

Сообщение от alexcon314
зачем СОКЕТОМ "лезть" в ПХП-скрипт? вы мне это можнте объяснить, что это вообще такое?

swf открывает сокет с сервером, через этот сокет общается со скриптом, получает/отправляет информацию, обновляет информацию в самом swf

Цитата:

Сообщение от alexcon314
ну так пробуйте завести сокет на <ip>:<port> вашего апача. что получится? если получится - что дальше?

разницы никакой, что на хост что на айпи

Цитата:

Сообщение от alexcon314
человек хочет из базы данные во флэш по сокету сбрасывать, например. кто это будет делать? демон из 20-ти строк? тогда чем этот вариант лучше PHP+LoadVars?
дались вам эти сокеты, ейбогу.
апач-это сокет,
запрос отсылаем LoadVars-ом (URLRequest-ом) типа "http://....page.php?param1...&param2=...."
апач запускает скрипт page.php, который лезет в базу, дергает данные, формирует ответ.
апач отсылает ответ флэшу.
чем не сокет? :)

вариант действительно дельный, и будет альтернативой если не запущу Socket.
Щас уже просто из принципа хочут понять почему не открывается сокет. + в сокете данные передаются в сыром виде, это открывает широкие возможности для развития. + можно прикрутить различные форматы передачи данных (тотже JSON)

grunerasta 16.11.2007 00:41

komar, если флешка работает не через хттп, а через сокет (а ведь ты надо полагать хочешь юзать XMLSocket) - то файл этот надо получить тоже из сокета. Когда флешка коннектится к серверу - она запрашивает этот файл (не помню как - посмотри в выводе сокета), и по этому запросу файл надо отдать.

Если писать сокет на питоне или ему подобных - то обрати вниманиена символ номер 27: так флеш говорит, что передача окончена

Пхп для таких вещей не пригоден - он как и хтмл только для текстов (питон полгода назад тоже был, он не поддерживал закрытие тредов - но может сокеты там уже дописали)

Апач - это действительно сокет, но тебе нужен сокет который работает по твоим правилам, а в апач писать могут только очень взрослые дяди с большим пузом и бородой

Хостинг нужен выделенный, лучше колокейшн - потому что все что выше апача на стартовых тарифах не работает

Chas 16.11.2007 03:06

по-моему у автора тут вообще недопонимание некоторое есть. сокет-клиент соединяется не со скритом 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

LinuxVideo 16.11.2007 11:52

Люди, откуда пошло это извращенное "сокет-сервер"? Мне читать вас больно, режет глаз. Это как масло-маслянное.
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

Цитата:

человек хочет из базы данные во флэш по сокету сбрасывать, например. кто это будет делать? демон из 20-ти строк? тогда чем этот вариант лучше PHP+LoadVars?
Да, именно он. И лучше будет тем, что не будет промежуточных оберток и парсеров. Вот надо мне во флешку передать 10 000 координат, как мне это сделать? Вариантов несколько... А если 100 000? Интересно, после какого количества сдохнет парсер (или начнет дико тормозить)? А сокет я могу читать по мере надобности, считал 8 байт - отрисовал. Через 1/25 секунды еще 8 байт считал, еще отрисовал. Да еще и сервер может постоянно контролировать поток, а значит интерактивность. На лоадварс мне же надо будет постоянно долбить сервер запросами. Уж лучше изобрести велосипед в виде своей собственной транспортной обертки, чем использовать чужие без понимания их устройства.

Цитата:

если флешка работает не через хттп, а через сокет (а ведь ты надо полагать хочешь юзать XMLSocket) - то файл этот надо получить тоже из сокета.
А что, http работает БЕЗ сокетов? Читайте ссылки, читать "масло-маслянное" сложно. XMLSocket и Socket не путаем.

Цитата:

а в апач писать могут только очень взрослые дяди с большим пузом и бородой
:lol:
У меня еще и волосы длинные.

Цитата:

Хостинг нужен выделенный, лучше колокейшн
Лучше сразу свой датацентр

Цитата:

это достаточно сложно даже на пхп
Про пхп не скажу (не люблю его), а на перле - 20 строк, в документации есть пример с построчным описанием. Можно скопипастить и поправить для себя

Цитата:

доступом к cron
Крон то для чего? Чего планировать надо?

grunerasta 16.11.2007 12:51

Цитата:

Люди, откуда пошло это извращенное "сокет-сервер"? Мне читать вас больно, режет глаз. Это как масло-маслянное.
Это народный фолклор, придуманный писцами клиентов - означает некий самопальный демон, который умеет открывать сокеты и писать именно то, что хочет писатель клиента (или помогающий ему писатель сервера). Если слышишь подобное выражение - то перед тобой клиент-программер или может флешер, который вроте&ал эту терминологию и чо там как должно называться - ему надо просто сохранить данные.

И разреши заметить, что это выражение ты тут сам употреблял и расшифровывал не дале как вчера.

Цитата:

А что, http работает БЕЗ сокетов? Читайте ссылки, читать "масло-маслянное" сложно.
Согласен, читать сложно, а вот к словам прие&ываться не по теме - большого ума надо.

Цитата:

XMLSocket и Socket не путаем.
Да, надо было написать "XMLSocket или Socket" - автор же задачу не обозначил. Извиняюсь если вызвал разночтения.

Цитата:

Лучше сразу свой датацентр
Лучше, но автор не осилит. Я тоже не осилю.

Цитата:

У меня еще и волосы длинные.
Эмо?

Цитата:

ненадо, кстати, ля-ля, что на пхп сокет-серверы не пишут. с мемкешем и оптимайзерами спокойно держат больше 400 юзеров
Может и держат, но жутко неудобно это писать, неэстетично и не красиво
***Теперь и я к свовам прие&ался. LinuxVideo, ваш дурной пример заразителен...

Chas 16.11.2007 13:14

та что за глупости: "народный фольклор ". это нормальное употребляемое слово. если не совру, то в Delphi стандартные компоненты так и назывались: Socket-client, Socket-server. это исключительно юниксоиды используют словечки типа демон, скелетон и т.д. с подачки некоторых авторов.

LinuxVideo 16.11.2007 13:45

Цитата:

разреши заметить, что это выражение ты тут сам употреблял и расшифровывал не дале как вчера.
Пытался говорить на местном диалекте, но потом это стало невыносимо

Цитата:

Эмо?
Админ.

Цитата:

то в Delphi стандартные компоненты так и назывались
Вот именно, что компоненты. Простые функции для приема и отправки данных. А тут socket server уже и в базы лазиют, запускаясь по крону... А потом "установлен сокет сервер на апаче".
Лучше "TCP-приложение, принимающее входящие соединения".

Прошу прощения за оффтоп.

komar 16.11.2007 14:06

Эх. Тут в одну корзину уже накидали все что можно, даже крон приплели.
Давайте с начала.

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 {
    import flash.display.Sprite;
        import flash.errors.*;
        import flash.events.*;
        import flash.net.Socket;
        import flash.system.Security;

        public class SocketExample extends Sprite {
                public var my_socket:Socket;
                public var host_url:String="localhost";

                public function SocketExample() {

//                        Security.allowDomain(host_url);
//                        Security.loadPolicyFile("http://design.severodvinska.net/crossdomain.xml");

                        my_socket = new Socket(host_url, 80);

                        my_socket.addEventListener(Event.CLOSE, closeHandler);
                        my_socket.addEventListener(Event.CONNECT, connectHandler);
                        my_socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                        my_socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
                        my_socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);




                }
....

код - из примера работы с классом Socket (Flash 9 Help -> class Socket)

все видим что стоят листенеры на события сокета(как канала), вот
my_socket.addEventListener(Event.CONNECT, connectHandler);

это событие не отрабатывается. Следовательно коннекта по какой причине не происходит.

Размещение всех файлов участвующих в процессе я описал. По идее все правила безопасности соблюдены.
Пример работает если его запускать из exe файла, и раотает если его запускать из среды флэша.

Также он работает на виндовом сервере IIS 6.0 и локально и удаленно.

alexcon314 16.11.2007 14:07

LinuxVideo - супер.
а теперь, если вас не затруднит, LinuxVideo - ваше решение проблемы автора.
задача.
используя стандартный флэш-клиент, осуществить соединение с сервером, передать/получить данные в удобном для автора формате (вариант - JSON).
при этом предполагается, что данные могут либо должны заносится/выниматься в/из базу(ы).
.....
решения на основе LoadVars/XML.sendAndLoad+PHP/Perl не предлагать :).
.....
хорошо бы без терминологических опусов. просто те самые 20 строчек кода, для начала.
.....
(добавлено)
komar, ок. теперь все встало на свои места.
почему бы было не назвать топик типа "Не работает то-то и то-то (AS3)" и не понуждать всех угадывать то что вам действительно нужно?

grunerasta 16.11.2007 14:29

komar, http-протокол разрывает соединение сразу после обмена данными, и вообще хз как реагирует на не-браузеры, апач по идее ждет - потом нах шлет, че делает IIS науке вообще не известно, флешу это не нравится, пиши отдельный сервер

А вообще чтобы вкурить тему - напиши сначала консольный клиент (ну или сп*зди откуда-нибудь, опен-соурс нынче популярен), подолбись им на 80й порт - и внимательно подумай над тем что он тебе расскажет

LinuxVideo 16.11.2007 14:34

> http-протокол разрывает соединение сразу после обмена данными

keep-alive


> просто те самые 20 строчек кода, для начала.

Код:

          #!/usr/bin/perl -Tw
          use Socket;
          my $EOL = "\015\012";
          sub logmsg { print "$0 $$: @_ at ", scalar localtime, "\n" }
          my $port = shift || 2345;
          my $proto = getprotobyname('tcp');
          ($port) = $port =~ /^(\d+)$/                        or die "invalid port";
          socket(Server, PF_INET, SOCK_STREAM, $proto)        || die "socket: $!";
          bind(Server, sockaddr_in($port, INADDR_ANY))        || die "bind: $!";
          listen(Server,SOMAXCONN)                            || die "listen: $!";
          my $paddr;
          $SIG{CHLD} = \&REAPER;
          for ( ; $paddr = accept(Client,Server); close Client) {
              my($port,$iaddr) = sockaddr_in($paddr);
              my $name = gethostbyaddr($iaddr,AF_INET);
              print Client "Hello there, $name, it's now ",
                              scalar localtime, $EOL;
          }

(c) perldoc perlipc
Из примера выкинуто немного, зато в 20 строк уложился.

komar 16.11.2007 14:35

хорошо что всем (надеюсь всем) всё стало понятно.

Я хотел сначал добавить эту тему в раздел про АС3, но считаю все-таки что дело не сколько в работе класса Socket, сколько в модели общения с сервером. Т.е. как раз "другие технологии"

+ уточню. Сейчас меня пока не интересует передача/получение данных, если будет сокет (канал) я это смогу осуществить. пхп на стороне сервера (работа с БД) тоже в принципе решено.

Дело именно в коннекте.
Т.е. варианты какие у меня наварились в течении этой недели:
1. Проблема с настройками сервера (админы и хостеры говорят что проблем быть не может)
2. Проблема с правилами безопасности (вохможна, хотя по манам не должно быть), и + не выдается никаких ошибок безопасности. На них тоже стоят листенеры.
3. Проблема правом коннекта к апачу для сторонних приложений (swf вместо броузера), хотя exe коннектится даже с локалки.
4. Ограничения коннекта в самом броузере (например, броузер не дает содержимому страницы осуществлять коннект в обход броузера).
5. Настройки флэшки на адобе (manager) и подобное не применимо поидее.
6. Видел мнение, что нужны выделенные серверы. Что мол на виртуальный хост коннект не получится. По-моему чушь, т.к. запросы страниц идут через такие же каналы.
7. Есть мнение что права коннекта могут зависеть от типа вставки swf в хтмл страницу. Т.е. обжекты, эмбеды и т.д. + часто многие используют яваскрипт для интерпретации флэшек (обычно для ИЕ, т.е. в нем баг, и сами микросовтовцы распространяли пример функций, как надо в для ИЕ вставлять флэшки).

LinuxVideo 16.11.2007 14:39

> Проблема с настройками сервера (админы и хостеры говорят что проблем быть не может)

Бери сниффер и смотри. Приходит ли вообще хоть чего-то, чего в ответ.


> По-моему чушь, т.к. запросы страниц идут через такие же каналы.

совершенно верно

komar 16.11.2007 14:44

Цитата:

Сообщение от grunerasta
komar, http-протокол разрывает соединение сразу после обмена данными

да, я знаю, ну и что. Разорвал соединени. На как данные понадобились, мы его снова открыли, для этого класс Сокет и юзается

Цитата:

и вообще хз как реагирует на не-браузеры
об этом и речь. Так тогда и скажите, что не в тот форум пришел.

Цитата:

А вообще чтобы вкурить тему - напиши сначала консольный клиент (ну или сп*зди откуда-нибудь, опен-соурс нынче популярен), подолбись им на 80й порт - и внимательно подумай над тем что он тебе расскажет
писать ниче не надо. Есть telnet, есть ворох сниферов если надо более подробно.
Но стобы этим пользовать нужны спец знания, которых у меня нет.

А вопрос был задан с расчетом, что кто-то пользовался классом Сокет, или сталкивался с подобными проблемами.

Ответы типа "возми то-то, догадайся сам" по-моему не для форума, где должны помогать решать задачи.


Цитата:

Сообщение от LinuxVideo
> Проблема с настройками сервера (админы и хостеры говорят что проблем быть не может)

Бери сниффер и смотри. Приходит ли вообще хоть чего-то, чего в ответ.

К этому все идет. Снифер я нашел, терь ищу кто мне с ним работать поможет. А то он больно навороченный.

grunerasta 16.11.2007 15:05

Тваюжмать! Не услышишь ты ничего от 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. Таких проблем не встречал, ничо сказать не могу

grunerasta 16.11.2007 15:08

Цитата:

да, я знаю, ну и что. Разорвал соединени. На как данные понадобились, мы его снова открыли, для этого класс Сокет и юзается
Чувак, ты не в теме - сокет юзается для того чтобы открыть соединение и не закрывать его, пока юзер не свалит, реально сокет нужен для того чтобы не только флешка могла командовать сервером, но и сервер флешкой (например биржевые сводки - флешка ничего не дергает, а сервер без спроса шлет ей данные)

komar 16.11.2007 16:04

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 файл. (как раз те случаи, в которых коннект срабатывает).

komar 16.11.2007 16:11

Ув. админы. Специально пишу отдельным постом.

Измените пожста название темы (как самому сделать не нашел). Т.к. разговор уже ушел в другое русло (про альтернативы закончили, речь о классе Socket из AS3, и его коннекте с сервером), а новую тему открывать нет смысла.

LinuxVideo 16.11.2007 16:12

> К этому все идет. Снифер я нашел, терь ищу кто мне с ним работать поможет. А то он больно навороченный.

Бери Ethereal (его продолжение вайршарк не пользовал), там все просто, правый клик на пакете - follow tcp stream. Очень удобно разбирать дампы


> Выделеный сервер - это тво ип, твоя строка, твой сервер - че хош то и вешай

Виртуальный дедик - все идентично. Только цена значительно ниже.


> сайт выдается взависимости от заголовка

Так сложно прописать слово host в заголовок? Уж если делаем работу с http, то надо бы почитать rfc2616, а то можно уйти еще дальше, что сокет-серверы будут простой шалостью.

komar 16.11.2007 16:17

Цитата:

Сообщение от LinuxVideo
Бери Ethereal (его продолжение вайршарк не пользовал), там все просто, правый клик на пакете - follow tcp stream. Очень удобно разбирать дампы

Спасибо

Цитата:

> Выделеный сервер - это тво ип, твоя строка, твой сервер - че хош то и вешай
Виртуальный дедик - все идентично. Только цена значительно ниже.
выделенный сервер я ни покупать ни ставить не собираюсь. Проект не буджетный.

Цитата:

Сообщение от LinuxVideo
Так сложно прописать слово host в заголовок? Уж если делаем работу с http, то надо бы почитать rfc2616, а то можно уйти еще дальше, что сокет-серверы будут простой шалостью.

:) ссылка есть в этой теме. Русское подробное описание. Все понятно, даже мне (хотя профиль обсуждения совсем не мой :) ).

grunerasta 16.11.2007 16:59

Цитата:

Я сокет юзаю для создания канала (это его прямое назначение, а оставлять его открытым или закрывать после обмена данными, это отдельная темы. И как прально LinuxVideo сказал, это прописывается в хедере запроса) между флэшкой и сервером, меня твоя биржа не интересует.
Юзай хттп и лоадварс, и не клюй мозг. Не нужен постоянный коннект - не нужен сокет.

Цитата:

Ответ, типа пади питон изучи, и не мудись с флэшем очень в тему
Я не предлагаю "не мудится с флешом", я предлагаю заглянуть на сторону сервера, где флеша нет. Питон учить проще - вот и выдал линку. Не прет учить - нанимай чорта, который все напишет и ему задавай вопрос - какого у тебя не коннектится.

Цитата:

+ в описании класса Sокет, указано:
Это да, забыл сказать - флешку надо на сервер выложить. Тогда все будет попадать куда надо.

grunerasta 16.11.2007 17:00

Цитата:

выделенный сервер я ни покупать ни ставить не собираюсь. Проект не буджетный.
С этих слов начинается провал бизнеса

komar 16.11.2007 17:08

Цитата:

Сообщение от grunerasta
Юзай хттп и лоадварс, и не клюй мозг. Не нужен постоянный коннект - не нужен сокет.

Ты на кой тогда на этот форум лезешь? Сиди со своим моском дома. Тут поидее люди вопросы задают, другие, сведущие, на них отвечают. Береги моск локально, не суйся в сеть.

Сокет узается для коннекта с сервером - по прямому назначению.

Цитата:

Я не предлагаю "не мудится с флешом", я предлагаю заглянуть на сторону сервера, где флеша нет. Питон учить проще - вот и выдал линку. Не прет учить - нанимай чорта, который все напишет и ему задавай вопрос - какого у тебя не коннектится.
и привыкни слушать/читать что тебе говорят. Уже все сказано.

Цитата:

Это да, забыл сказать - флешку надо на сервер выложить. Тогда все будет попадать куда надо.
А ты думал я флэшку локально запускаю, ага.

komar 16.11.2007 17:10

Цитата:

Сообщение от grunerasta
С этих слов начинается провал бизнеса

Модерыторы, можно я матами поругаюсь?

Ты где увидел слово бизнес блин. Открой первую страницу темы, умник, и читай. По буквам, может тогда в твой моск загрузится информация из этой темы.

grunerasta 16.11.2007 19:17

Цитата:

Сокет узается для коннекта с сервером - по прямому назначению.
По пряммому назначению, да. Мысль ясна, постоянный коннект не нужен, но тебя не прет стандартный хмл - ты хочешь написать свой с блекджеком и шлюхами. Мысль конечно стоящая: для самообразования и чисто поржать.

komar 16.11.2007 19:31

Цитата:

Сообщение от grunerasta
Мысль конечно стоящая: для самообразования и чисто поржать.

Точно! Только вместо поржать уже принцип.

ulik 19.11.2007 18:33

Комар, какой сокет ? Ты о чем ?! sendAndLoad используй. И будет тебе счастье.
сначала проверку login/pass с базой делай, потом создай сессию и все.
Зачем себе так мозги грузить по ерунде?

Нужна будет помощь - все расскажу. пиши: ulik@lp-design.ru

Max Stone 03.03.2009 23:12

komar, Нашел тему и понял что мне в ближайшее время придется столкнуться с аналогичной проблемой. Знаю что прошло много времени, но мне интересно как решилась эта проблема? Или может кто-нибудь из других участников дискуссии знают решение. Нужно именно socket соединение. Но порт будет другой прослушиваться, сервак будет на vb.net.


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

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