Elebom.com

Задача данного проекта - разработать web-интерфейс для сети peer-to-peer на базе семейства протоколов DC (NMDC, ADC). Зачем спросите Вы? Ведь есть же бесплатные клиенты. Любой желающий может установить подобный клиент к себе на компьютер и скачивать любые файлы, которые только захочет.

main

Смысл есть. Во-первых не любой желающий сможет подключится к сети P2P в активном режиме. В большинстве случаев желающие находятся за файрволом или NAT и не имеют персонального внешнего IP-адреса, поэтому соединиться с ними из интернета невозможно. Это ограничивает возможности желающего по скачиванию файлов, так как он может скачать только с тех пользователей, которые находятся в активном режиме. В данном проекте DC++ клиент на сайте работает в активном режиме и может скачивать файлы у любых других пользователей. Это сильно расширяет возможности наших "желающих".

Во-вторых затраты трафик. Не все подключены к интернету по безлимитным тарифам и некоторые все же платят за трафик. А там, где за трафик не надо платить, админы обычно закрывают на файрволах возможность подключения к чему-либо, кроме сайтов. Попробуйте найти какую-нибудь песню или интересное видео для бесплатного скачивания на сайте. Кругом торренты, но к ним доступа нет - админы закрыли. Данные проект позволяет пользователям, которые ограничены в использовании DC-клиента или torrent-клиента на своем компьютере скачать интересующие их фильмы, музыку, книги, игры и множество других вещей. И при этом сэкономить на трафике.

В-третьих скорость скачивания. Обычно скорости скачивания файлов в P2P сетях не велики. К тому же приходится ждать, пока освободиться очередь для скачивания. Если Вам требуется скачать фильм или другой большой файл, либо кучу файлов, то приходится долгое время оставлять компьютер включенным. Если же такой возможности нет, то скачивание может затянуться на несколько дней. В случае с данным сайтом Вы добавляете необходимый файл в свою персональную очередь скачивания. Сайт сам скачает этот файл без Вашего участия. Вам останется только на приличной скорости безо всяких очередей скачать этот файл на свой компьютер. Причем Вы можете поставить файл в очередь скачивания с одного компьютера, например, рабочего, а потом из дома скачать его на свой домашний компьютер. Или наоборот.

saved

Несколько слов о разработке этого сайта.

Сама по себе разработка веб-интерфейса была понятна и никаких вопросов не вызывала. Основной вопрос был в том, как именно реализовать работу с P2P-сетью. Мы рассматривали различные варианты: использование готового клиента, запускаемого в отдельном процессе параллельно нашему веб-приложению; самостоятельная реализация клиента "с нуля"; использование open-source реализаций. После анализа плюсов и минусов всех вариантов было решено использовать open-source клиент DC++. Но в качестве исходных кодов был взят не родной дистрибутив DC++, а его клон Strong DC++, так как последний уже был настроен для сборки в VisualStudio.

Но и даже использование уже готового клиента не давало ответы на все вопросы. Web-приложение работает в сервисном режиме, то есть не имеет никакого графического интерфейса на сервере, никак не взаимодействует с локальными пользователями. А клиент DC++ и все его вариации разработаны именно для использования конечным пользователем и никак не подразумевают использование в сервисном режиме. Более того, клиент DC++ не предоставляет средств для внешнего программного управления его функциями, запуском поиска, скачиванием файлов. Поэтому следующим ходом стало изучение исходных кодов клиента на предмет возможности адаптации к работе совместно с web-приложением.

Исходные коды DC++ порадовали хорошей организацией. Пользовательский интерфейс отделен от логики самого клиента. Сам клиент можно использовать независимо от пользовательского интерфейса. Но все же в некоторых местах пришлось вносить небольшие изменений в код DC++. А  в целом ничто не противоречило возможности подключить DC++ в веб-приложение.

После изучения и проектирования пришла пора реализации. Первым делом мы разработали обертку на Managed C++ над стандартной реализацией DC++. Для проверки функционирования обертки было разработано консольное приложение, которое позволяло выполнять основные функции веб-интерфейса - поиск и скачивание файлов.

Далее мы приступили к разработке веб-приложения. Как уже было упомянуто ранее, разработка веб-интерфейса никаких вопросов не вызывала. Набор технологий, библиотек, модулей и механизмов, которые предоставляет .NET Framework, позволяет с легкостью строить эффективные, удобные, функциональные, приятно выглядящие, дружелюбные, безопасные решения с минимальными трудозатратами.

Для управления пользователями был использован механизм Membership и стандартная реализация этого механизма на базе SQLMembershipProvider. Мы не тратили силы на проектирование структуры базы данных, на разработку механизмов доступа, на построение механизмов аутентификации и авторизации. Мы не написали ни одной строчки кода, связанного с этим. Достаточно было создать чистую базу данных, инициализировать ее с помощью утилиты aspnet_regsql из состава .NET Framework и настроить использование механизма Membership в файле конфигурации веб-приложения. Там же мы настроили права доступа к страницам сайт и указали стандартную страницу авторизации. Все это заняло порядка часа. Еще тридцать минут ушло на разработку страницы авторизации и шаблона страницы с шапкой.

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

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

А вот при реализации поиска возникли трудности. Если Вы, уважаемый читатель, пользовались DC++, то должно быть заметили, что после запуска поиска он не сразу начинает искать, а только через некоторое время. Это время отображается внизу окна поиска. При изучении исходных кодов мы обратили внимание на соответствующий блок кода, который не давал запускать поиск чаще, чем раз в 30 секунд. Так вот причина этого в том, что в протоколе NMDC отсутствует возможность определить на какой запрос поиска приходит соответствующий ответ с результатом поиска. В случае desktop-приложения, с одним пользователем, такая схема вполне допустима, но в случае многопользовательского веб-приложения необходимо искать другие решения. Даже выстраивание запросов в очередь и последовательное их исполнение было бы недопустимым, так как время ожидания пользователем ответа на запрос может достигать в этом случаем десятка, а то и нескольких десятков минут.

Следовало придумать элегантный выход из этой ситуации. Таким выходом стала реализация отдельного компонента выполняющего поиск. Этот компонент был реализован как отдельное самостоятельное приложение, которое запускалось сайтом на каждый запрос поиска, и передавало обратно сайту результаты поиска. Сама по себе задача реализации взаимодействия между различными приложениями не является тривиальной в практике программирования. И хотя Windows предоставляет механизмы для решения подобных задач, но трудоемкость решений с непосредственным использование этих механизмов велика. А вот механизмы взаимодействия приложений, присутствующие в .NET Framework, позволяют с минимальными затратами реализовать подобные решения. Мы использовали для этого технологию .NET Remoting. Причем, так как веб-приложение и приложение поиска работают на одном сервере, то связь между ними осуществляется по протоколу IPC, который обеспечивает минимальные задержки при передаче информации. Если же в дальнейшем в целях масштабирования потребуется разнести эти приложения по разным серверам, то достаточно будет поменять настройки в конфигурационных файлах, и приложения смогут общаться по протоколу TCP или HTTP.

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

Интернет-сервис

Интернет − это очень универсальный инструмент и круг решаемых с помощью этой технологии задач огромен.

  • Презентация компании, продукта, услуги
  • Продажа товаров, продуктов, услуг, информации
  • Организация обратной связи и каналов для общения с клиентами
  • Повышение эффективности бизнес-процессов

Другие проекты