26. Server Part2. Обмен данными по протоколу HTTP

junior – серия статей для начинающих ActionScript-разработчиков.
Все статьи серии:
http://flashpress.ru/blog/category/junior/
Серия статей на тему Сервер:
  1. Server Part1. Работа с сервером. Теория
  2. Server Part2. Обмен данными по протоколу HTTP
  3. Server Part3. Отладка запросов в браузере
  4. Server Part4. Работа с сокет-серверами

Как я говорил в предыдущей статье, любой обычный запрос на загрузку текстового файла или картинки, уходит на сервер по протоколу http. Если вы разрабатываете клиент-серверное приложение, то запросы обычно делаются к php скрипту. PHP скрипт выполняется на сервере, обрабатывает ваш запрос и при необходимости отправляет во флешку информацию из базы данных сервера. Такой подход позволяет скрыть от пользователей критически важную информацию.

Абсолютные и относительные ссылки

Ссылка на ваш php скрипт может быть абсолютной или относительной:

  • абсолютный путь – http://domain.ru/catalog1/file.php
  • относительный путь – /catalog1/file.php


Если флешка и php скрипт находятся на разных сайтах(доменах) то необходимо использовать абсолютный путь, с указанием http:// в начале ссылки. Если в начале относительной ссылки стоит символ /, то путь считается относительно корневого каталога сайта, если символа нет, ссылка читается относительно той страницы, в которую загружена флешка. Например если флешка находится на любой странице домена http://domain.ru, и использует ссылку /catalog1/file.php, файл будет загружаться по ссылке http://domain.ru/catalog1/file.php. Если же флешка находится на странице http://domain.ru/catalog2/page.html, и указать ей ссылку catalog1/file.php, флешка попытается загрузить файл от сюда: http://domain.ru/catalog2/catalog1/file.php. На первый взгляд это кажется сложным – не переживайте, со временем все встанет на свои места :)

Класс URLLoader

Класс URLoader служит для отправки запросов на сервер по протоколу HTTP. Для того чтобы сделать запрос, надо вызвать метод load и передать ему объект класса URLRequest:

Чтобы получить ответ от сервера, надо дождаться события Event.COMPLETE:

Пример 1 (кликните чтобы развернуть)
Рассмотрим пример того как можно обратится к php скрипту, и получить от него ответ. Флешка внизу отправляет запрос: /blog/contents/simples/server/run1.php , и получает  в ответ строку: Hello World! . Чтобы увидеть результат выполнения скрипта в браузере, вы можете скопировать в адресную строку ссылку:
http://flashpress.ru/blog/contents/simples/server/run1.php

Здесь должна быть флешка. Установите Flash Player


Код run1.php:

Код флешки:

Передача параметров

Если в запросе необходимо передать параметры, например имя пользователя и пароль для авторизации необходимо создать объект класса URLVariables и передать его объекту URLRequest:

Пример 2 (кликните чтобы развернуть)
В этом примере флешка передает скрипту run2.php два параметра: name и password . PHP скрипт проверяет пароль, если он равен 123, возвращает приветствующую строку с именем, если пароль не передан или не равен 123, скрипт ругается ошибкой. Чтобы увидеть результат выполнения скрипта в браузере, вы можете скопировать в адресную строку ссылку:
http://flashpress.ru/blog/contents/simples/server/run2.php?name=Serious Sam&password=123

Здесь должна быть флешка. Установите Flash Player


Код run2.php

Код флешки:

GET/POST

Данные можно передавать GET или POST запросом. Вообще конечно правильнее будет сказать что для получения данных нужно использовать метод GET, а для отправки – POST. По умолчанию флешка всегда передает данные в формате GET, чтобы указать явно, свойством method объекта URLRequest:

В php чтобы получить POST данные воспользуйтесь переменной $_POST.

Пример 3 (кликните чтобы развернуть)
Эта флешка работает так же как и предыдущая, только данные передаются методом POST.

Здесь должна быть флешка. Установите Flash Player


Код run3.php

Код флешки:

Кодировка текста

По умолчанию флешка всегда работает в кодировке utf-8. Если ваш сервер работает в такой же кодировке то у вас не должно быть проблем с отображением кирилических символов. Если же ваш сервер отдает текст в кирилической кодировке, например cp1251, тогда надо флешке сообщить что все приходящие от сервера данные доожны обрабатываться в соответствующей кодировке. Сделать это можно с помощью метода Sytem.useCodePage:

crossdomain.xml

Если флешка и php скрипт лежат на разных доменах/поддоменах, то по умолчанию флешка не сможет получить доступ к php-скрипту. Чтобы дать флешке возможность вызывать скрипты из других доменов/поддоменов, необходимо положить в корень домена/поддомена файлик crossdomain.xml с содержимым:

Т.е. если у вас флешка лежит в домене A, а php скрипт лежит в домене B, то в корень домена B необходимо положить этот файл. Более тонкую настройку файла crossdomain.xml мы разберем в отдельной статье в этой серии.
Выше сказанное относится и к обычным ресурсам тоже, т.е. без файла crossdomain.xml вы не сможете загружать картинки, флешки и все остальное из другого домена.

Это связано с политикой безопасности Flash Player. Прочитать подробно про безопасность Flash Player можно на сайте Adobe.

А как же сервер может отправить данные во флешку?

Ответ прост – никак! Точнее по протоколу HTTP это не возможно. Если очень хочется можно создать Socket-соединение (подробно про сокеты читайте в последующих статьях серии). Страшно от слова сокеты? Не беда, чтобы сервер имел возможность передавать во флешку информацию, необходимо сделать несколько простых шагов. Во первых делаем периодический опрос сервера во флешке, на наличие новой пачки данных. Т.е. флешка, например, раз в секунду отправляет на сервер пустой запрос. Далее в ответ сервер должен вернуть накопившуюся пачку данных, если таковая имеется. Здесь надо предусмотреть передачу в одном ответе, сразу несколько сообщений. Приведу небольшой пример. Вы играете в онлайн игру, пока вы делали запрос, на сервере произошло несколько изменений:

  • Ваш враг получил ранение от вашего выстрела
  • Ваш враг умер от выстрела другого игрока из вашей команды

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

Исходники примеров здесь.

Серия статей на тему Сервер:
  1. Server Part1. Работа с сервером. Теория
  2. Server Part2. Обмен данными по протоколу HTTP
  3. Server Part3. Отладка запросов в браузере
  4. Server Part4. Работа с сокет-серверами

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 3168 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress:


  1. Den

    Интересно было бы посмотреть пример пустых запросов для опроса сервера на наличие обновлений.

    1. Serious Sam Автор записи

      Пустым запросом может быть что угодно, это уже как вы договоритесь с программистами, которые пишут вам сервер. Вы можете передавать просто пустую строку(не очень хороший вариант), а можете делать запрос вида:

      Или еще короче:

  2. Дмитрий

    Подскажите, т.е. в ваших примерах мы получает от сервера ответ -строку,
    а как получить цифровой, двоичный, XML ? Спасибо