Опубликован: 23.12.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Московский физико-технический институт
Лекция 14:

Работа флэш-программ в Internet

Пара слов о специальных серверных решениях

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

Такие инструменты, как LoadVars, XML , getURL позволяют решить много задач, связанных с серверным взаимодействием через HTTP, а с помощью XMLSocket можно взаимодействовать с сервером напрямую через TCP/IP.

В этом разделе мы коротко рассмотрим последний из названных способов взаимодействия, а также некоторые другие технологии.

XMLSocket

Итак, мы уже сказали, что во Flash MX существует механизм для организации сетевых взаимодействий на уровне TCP/IP. И что для этого предназначен класс XMLSocket . Он очень похож на класс LoadVars по своей структуре, так как тоже служит для асинхронной передачи данных (в XML -формате).

Рассмотрим один из стандартных сценариев использования этого класса. Создаем XML -объект для пересылки.

var myXML = new XML();
var myLogin = myXML.createElement("login");
myLogin.attributes.username = usernameTextField;
myLogin.attributes.password = passwordTextField;
myXML.appendChild(myLogin);
myXMLSocket = new XMLSocket();
// создаем сокет (допустимы только клиентские)
// открываем соединение с сервером
// здесь "myserver" - имя сервера, "1457" - номер TCP-порта
myXMLSocket.connect ("myserver", "1457");
myXMLSocket.send(myXML); //отправляем данные
myXMLSocket.close(); //закрываем соединение

Класс позволяет определить несколько обработчиков для реакции на стандартные события:

onClose() - соединение закрыто сервером

onConnect (success) - запрос connect() выполнен. Если параметр success равен true, то соединение успешно открыто, если false - соединение установить не удалось.

onData (data) - с сервера пришел нуль-терминированный ответ data (завершающий нуль-символ не включается в параметр data ). По умолчанию реализация onData() вызывает обработчик onXML(), как если она бы выглядела вот так:

XMLSocket.prototype.onData = function (src) {
 this.onXML(new XML(src));
}

Эту реализацию можно подменить, если не нужно заниматься синтаксическим разбором XML, а достаточно строки, возвращенной сервером.

onXML(object) - с сервера пришел нуль-терминированный ответ. В параметре object - результат разбора строки ответа, которая может иметь вид:

<MESSAGE USER="John" TEXT="Hello, my name is John!" />

Тогда обработчик можно написать так:

function myOnXML(doc) {
	var e = doc.firstChild;
	if (e != null && e.nodeName == "MESSAGE") {
		displayMessage(e.attributes.user, e.attributes.text);
	}
}
myXMLSocket.onXML = myOnXML;

Flash Remoting

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

Одна из технологий, разработанных Macromedia и призванных упростить этот процесс - это Flash Remoting MX.

Flash Remoting представляет собой двухкомпонентную надстройку над интерфейсом взаимодействия клиента и сервера.

На клиенте она реализуется в виде API NetServices, последние устанавливаются как специальный набор компонентов, которым пользуется флэш-приложение для обращения к бизнес-сервисам, а серверная часть реализована отдельно для разных провайдеров бизнес-логики: J2EE, Microsoft ASP.NET, SOAP Web Services, ColdFusion MX.

Например, для J2EE - это сервлет, для ASP.NET - сборка и т. д.

Обмен данными производится с помощью бинарных сообщений AMF (ActionScript Message Format), типы данных автоматически конвертируются из типов ActionScript в типы данных сервера приложения и назад.

Использование Flash Remoting -сервисов на клиенте очень похоже на использование веб-сервисов, но оно всегда асинхронное: для получения ответов пишутся ActionScript-обработчики специальной сигнатуры.

Сейчас мы приведем слегка укороченный вариант примера, приведенного на сайте Macromedia (вот в этом документе http://livedocs.macromedia.com/flashremoting/mx/Using_Flash_Remoting_MX/UseActionScript7.htm#1192607 ; чуть ниже помещена ссылка на полную подборку документации, к которой принадлежит сей документ). Итак, вот обещанный пример:

function getTemperature_Result(temperature)
 	 { temperatureIndicator.text = temperature; }
function getForecast_Result(forecast)
{ forecastIndicator.text = forecast; }
weatherService.getTemperature("New York");
weatherService.getForecast("Chicago");

Также существует специальная поддержка для обработки серверных исключений и отладки ( NetConnection Debugger ).

Клиентские компоненты FlashRemoting для Flash MX можно бесплатно загрузить с сайта Macromedia (в отличие от серверных надстроек, которые нужно покупать).

Какие еще бывают серверные решения

Для полноты картины упомянем еще пару решений от Macromedia. В свое время достаточно известен был Macromedia Generator, который устанавливался на сервере и генерировал swf-файлы по специальным шаблонам (шаблоны эти можно было приготовить при помощи Macromedia Flash). В настоящее время эта технология уже устарела (самая свежая документация, которую нам удалось отыскать на сайте Macromedia, касалась совместной работы Generator и Flash 5).

Зато появилась еще одна многообещающая технология под названием Macromedia Flash Communication Server MX. Чтобы использовать ее, вам нужно приобрести у Macromedia соответствующий продукт (впрочем, пробная версия даже после истечения периода опробования все еще оставляет возможность создавать до пяти одновременных соединений, что вполне достаточно для целей разработки). Итак, вы устанавливаете на своем сервере Flash Communication Server. Для обмена данными с сервером в клиентском ролике сначала создается объект NetConnection, с помощью которого открывается соединение. А затем происходит обмен данными с помощью уже знакомого нам класса SharedObject (только используется не метод getLocal, а метод getRemote ). В принципе, все эти механизмы рассчитаны скорее на Flash MX 2004, поскольку во Flash MX класс NetConnection еще не документирован (хотя и существует). Вы можете почитать подробнее о работе с Communication Server, скажем, переводную статью на http://Flasher.ru, она расположена по адресу http://www.flasher.ru/tutorial/viewtut.php?id=205

алексеи федорович
алексеи федорович
Беларусь, рогачёв
Тамара Ионова
Тамара Ионова
Россия, Нижний Новгород, НГПУ, 2009