Создание простого сервиса обмена сообщениями на WMS
Предлагаемый сервис будет работать на сервере Wowza Media Server. Данный сервер и среду разработки можно скачать с этого сайта.
Создание нового пректа
Открыв Wowza IDE, выполняем команду File->New…->Wowza Media Server Pro project. Указав название проекта в первом окне, преходим к окну создания нового модуля. В этом окне указываем пакет и имя создаваемого модуля. Также можно указать методы, которые будет реализовывать модуль и задать название дополнительного модуля. Например можно ввести следующие данные:
Package: ru.vaniashev
Name: Messaging
Custom Method: sendMessage
Также, оставим реализацию методов onConnect() и onDisconnect. После нажатия кнопки Finish будет создан новый проект, содержащий класс Messaging, реализующий заданные методы.
Теперь можно запустить созданный модуль прямо из среды разработки. Но перед этим следует в паке /applications/ сервера, создать директорию, в которой будут находиться ваши модули. Также, директурию с этим именем необходимо создать в папке /conf/ сервера и поместить туда Application.xml из /conf/. В этот файл необходимо добавить описание вновь созданного модуля. В данном случае оно будет выглядеть так:
<Module> <Name>Messaging</Name> <Description>My modules</Description> <Class>ru.vaniashev.Messaging</Class> </Module>
Подключение и отключение пользователей
Список подключенных пользователей будет храниться в карте, ключем которой является идентификатор подключения пользователя, а значением - ник пользователя.
При подключении, клиент будет передавать имя пользователя. Следовательно, имя пользователя мы можем получить из первого параметра, приходящего в метод onConnect().
public void onConnect(IClient client, RequestFunction function,
AMFDataList params) {
String login = params.getString(PARAM1);
onlineUsers.put(client.getClientId(), login);
}
При отключении пользователя, его необходимо удалить из карты:
public void onDisconnect(IClient client) {
onlineUsers.remove(client.getClientId());
}
Передача сообщения
В коде приложения уже есть каркас метода sendMessage(). Этот метод будет вызываться клиентом для передачи сообщения пользователю. Метод будет принимать два параметра - имя пользователя и текст сообщения. В данном методе будет осуществляться вызов метода на клиенте для передачи сообщения.
public void sendMessage(IClient client, RequestFunction function,
AMFDataList params) {
String clientName = params.getString(PARAM1);
String message = params.getString(PARAM2);
IClient reciever = getVHost(client).getClient(getClientId(clientName));
reciever.call("recieveMessage", null, onlineUsers.get(client.getClientId()), message);
}
Клиент, с которого посылается сообщение, передает серверу имя получателя сообщения и текст сообщения. По имени пользователя получается идентификатор клиента, по которому, используя метод объекта класса IVHost, получается объект подключения и вызывается метод recieveMessage на клиенте получателе. В этот метод передается имя отправителя и текст сообщения.
Если бы разрабатывалось приложение - чат, то целесообразно было бы использовать SharedObject для разделения текста чата между всеми клиентами. Но в данном случае, удобнее использовать методы server-client.
Создание клиента
Сначала клиенту необходимо подключиться к Wowza Media Server. При подключении необходимо передать логин пользователя. Для этого создатим TextInput для ввода логина и кнопку, по нажатию на которую будет выполнено подключение.
Для отправки сообщения, необходимо создать TextInput для ввода логина получателя сообщения и TextInput для ввода текста сообщения. Также необходимо создать кнопку, по нажатии на которую будет происходить отправка сообщения.
Входящие сообщения будут отображаться в текстовом поле.
В итоге, форма приобрела следующий вид:

Flex форма
По нажатии кнопки подключения, выполнятся метод onConnect:
public function onConnect():void{
connection = new NetConnection();
connection.client = new Client(messages);
connection.connect("rtmp://localhost/messaging", userName.text);
}
В нем создается подключение, свойству client которого присваивается объект созданного ранее класса Client. Его код приведен ниже. После этого выполняется подключение по протоколу RTMP к Wowza Media Server, установленном на локальной машине. В метод connect() передается имя пользователя.
Класс Client содержит метод recieveMessage(), который вызывается сервером. В него передается имя пользователя, пославшего сообщение и текст самого сообщения. Текст сообщения и имя пользователя длобавляются в поле с сообщениями:
public class Client
{
private var messages:TextArea;
public function Client(messages:TextArea)
{
this.messages = messages;
}
public function recieveMessage(name:String, message:String):void{
messages.text = messages.text + "\n" + name + ": " + message;
}
}
Сообщение посылается с помощью вызова метода сервера sendMessage():
public function onSendMessage():void{
connection.call("sendMessage", null, reciever.text, message.text);
}
Заключение
В данной статье был приведен простой пример организации обмена сообщениями между flash клиентами посредством Wowza Media Server. Данный сервер предоставляет мощные возможности организации приложений обмена текстовыми, аудио и видео данными между несколькими клиентами.
Жду ваших вопросов и замечаний!

02 Сен 2009 в 6:42 пп
Статья хорошая, но почему не льзя для не опытных пользователь зделать удобные исподники
т.е я не печатал на flash знаю только php C# js и как мне быть, если я хочу запустить скрипит сервера и клиента а потом эксперемнты ставить
02 Сен 2009 в 6:43 пп
исходни есть но попробуй все покусочкам собрать что бы не было erro