Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Миграция клиента, виртульный сервер 
:(
    Опции темы
dmitryperets
Дата 23.12.2005, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Добрый день,

Есть такой проект (для ВУЗа): виртуальный сервер для предоставления услуги потокового аудио. Т.е. имеется единый IP, к которому подключается клиент и выбирает песню. Далее центральный сервер ("мост") переводит клиента на один из нескольких серверов, которые непосредственно обеспечивают потоковое аудио клиенту. Выбор сервера осуществляется "мостом" в соответствии с нагрузкой или любым другим алгоритмом (например, Round Robin).

Теперь проблема... Необходимо обеспечить следующую функциональность. В случае, если в процессе получения клиентом потока с некого сервера, этот сервер вдруг падает, "мост" обязан тут же перевести клиента на другой сервер и продолжить поток оттуда. Клиент при этом ничего не должен почувствовать.

На сегодняшний день мы реализовали виртуальный сервер без поддержки этой "миграции". Всё очень просто: ASP.NET + C# + SQL + Windows Media Player. Но вот теперь нужно делать эту "миграцию". Может кто-то когда-то сталкивался с чем-то подобным? Помогите линком, идеей, чем угодно! Может стоит взять какой-то open source плеер и переделать его? Или ещё как? Любой самый маленький совет поможет!

Система не должна быть идеальной, но она должна работать.

Спасибо.
PM MAIL   Вверх
mr.DUDA
Дата 23.12.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



А что тут такого сложного? C#-клиент работает по следующему алгоритму:

1) соединяемся с центральным сервером и просим у него IP свободного download-сервера
2) соединяемся с download-сервером и начинаем скачивание данных с начала требуемого файла
3) при ошибке (когда клиент словил сетевой exception) снова соединяемся с центральным сервером и по новой просим IP свободного download-сервера, затем переходим к пункту 2, только качаем не с начала файла а с прерванной позиции

Это всё, конечно, если клиент - приложение написанное нами (например на C#), а не "голый" Windows Media Player.


--------------------
user posted image
PM MAIL WWW   Вверх
dmitryperets
Дата 23.12.2005, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Цитата

3) при ошибке (когда клиент словил сетевой exception) снова соединяемся с центральным сервером и по новой просим IP свободного download-сервера, затем переходим к пункту 2, только качаем не с начала файла а с прерванной позиции

Это всё, конечно, если клиент - приложение написанное нами (например на C#), а не "голый" Windows Media Player.


Клиент можно написать. Но беда в том, что этот клиент должен потом ведь вызвать Windows Media Player. Как передать ему поток?

И ещё вопрос: а сетевой exception мы должны кидать? Или при проблеме со связью будет какой-то стандартный?
PM MAIL   Вверх
mr.DUDA
Дата 24.12.2005, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 2
Всего: 232



Цитата(dmitryperets @ 23.12.2005, 20:43)
Клиент можно написать. Но беда в том, что этот клиент должен потом ведь вызвать Windows Media Player. Как передать ему поток?

Самый простой способ - сохранить весь файл на диск и вызывать плеер через командную строку. Более сложный способ - интегрировать плеер в своё приложение, тогда возможно (не уверен) есть способ воспроизводить видео/аудио "на лету" по мере скачивания потока.

Цитата(dmitryperets @ 23.12.2005, 20:43)
И ещё вопрос: а сетевой exception мы должны кидать? Или при проблеме со связью будет какой-то стандартный?

Все исключения генерируются системой, автоматически. К примеру, если юзаем TcpClient в паре с NetworkStream, то у нас будут возникать исключения SocketException (при неудачном соединении, например), ObjectDisposedException (если сокет был преждевременно закрыт, а мы пытаемся читать из потока), IOException (если поток был закрыт, а мы читаем из него), кроме того у NetworkStream есть св-во CanRead, показывающее, можно ли читать из потока. Всё это описано в MSDN, простр-во имён System.Net.Sockets.


--------------------
user posted image
PM MAIL WWW   Вверх
dmitryperets
Дата 25.12.2005, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.12.2005

Репутация: нет
Всего: нет



Спасибо. А как лучше организовать стриминг? У нас пока обычный Web Streaming, но с ним будет проблема - тэги *.asx, пускающие поток не с начала, не будут работать...

Это сообщение отредактировал(а) dmitryperets - 25.12.2005, 18:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.