Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Ускоритель/уменьшитель интернета


Автор: ivashkanet 29.4.2006, 16:29
Идею мне подала вот эта http://forum.vingrad.ru/index.php?showtopic=93728 и эта http://www.onspeedrussia.ru/index.php?page=39.

Основная идея:
Уменьшение объема трафика за счет сжатия (архивирования) информации.

Принцип работы:
Связка WinService+WebService

Браузер запрашивает URL, WinService его перехватывает и отправляет WebService-у. 
Он получает страничку, сжимает содержимое, отдает WinService-у.
Тот его распаковывает и передает браузеру.
Проще идеи не придумаешь  smile 

Возникающие вопросы:
1) Естественно, как это все реализовать. smile 
Не сильно предстваляю КАК, но что реально это 100%.

2) На первое время WebService можно разместить на бесплатном хосте, поддерживающем ASP.Net.
Дальше, при увеличении количества клиентов сервиса, можно зарегистрировать еще несколько дочерних сервисов, на этом или другом хосте. 
Если, вдруг, чего не бывает, проект разрастется и бесплатных хостингов нам не хватит можно взять платный.
Вопрос: "Где взять деньги на платный хостинг?". 
Предлагаю стелать приложение, настраивающее наш Win-сервис и продавать его за копейки (например 1$ лицензия). А для тех кто не хочет платить сделать настройки с помощью ini-файла.

3) Нужно выбрать бесплатный архиватор, который бы работал быстро и более-менее качественно. (самим писать, ИМХО, смысла нет. Я например, не знаю ни одного алгоритма сжатия, кроме дерева Кого-то-там) 
В настройках (Win-сервис) архиватора  можно выбирать степень сжатия (балланс: скорость/трафик). 
А то вместо ускорителя интернета можно получить замедлитель  smile 

4) ... 

n) По мере разработки вопросов набереться еще много  smile 

Всех, кого моя идея заинтересовала, милости прошу в проект. 

Автор: Softaz 30.4.2006, 10:44
У некоторых провайдеров (имхо, большинства) есть поддержка аппаратного сжатия трафика, главное - чтобы модем клиента это поддреживал.
Например, на V.92 скорость ~20МБ/час. С сжатием она возрастает примерно до 40МБ (текст).

Предлагаемая тобой программа может сделать и больше, если сжатие будет больше чем в 2 раза.

Добавлено @ 10:46 
А если предполагается использование HTTP протокола  версии 1.0 и выше, то можно информацию компрессовать в gzip.
Далее этот поток натравлять на браузер, который сам обязан ее раскомпрессовать. 

Автор: ivashkanet 30.4.2006, 11:40
Вчера сделал свой первый Web-сервис, аля Hello World. Подключился к нему из win-приложения. Все заняло, с обучением, 40 минут smile  Обожаю .Net 
Сегодня буду рефракторить класс WebBrowser на предмет того как получить код страницы и сохранить ее на диске.

P.S. 
Цитата(Softaz @  30.4.2006,  10:44 Найти цитируемый пост)
У некоторых провайдеров

У моего нет  smile У меня входящие сжимаются не более 3-5% smile 
Цитата(Softaz @  30.4.2006,  10:44 Найти цитируемый пост)
Предлагаемая тобой программа может сделать и больше, если сжатие будет больше чем в 2 раза.

Вот это и прильщает в ней smile 
Цитата(Softaz @  30.4.2006,  10:44 Найти цитируемый пост)
А если предполагается использование HTTP протокола  версии 1.0 и выше, то можно информацию компрессовать в gzip. 

Протоколов вообще никаких (напрямую, конечно) использовать не надо, все это должен делать за нас Net  smile 
Цитата(Softaz @  30.4.2006,  10:44 Найти цитируемый пост)
Далее этот поток натравлять на браузер, который сам обязан ее раскомпрессовать. 

Может и такая будет реализация, я в этом не разбираюсь, пока  smile . 

Автор: Exception 30.4.2006, 18:48
Цитата(ivashkanet @  30.4.2006,  12:40 Найти цитируемый пост)
WebBrowser 


Он тут причём?

А идея интересная. 

Автор: Softaz 1.5.2006, 01:07
Цитата(ivashkanet @  30.4.2006,  11:40 Найти цитируемый пост)
Сегодня буду рефракторить класс WebBrowser на предмет того как получить код страницы и сохранить ее на диске.


Создай (== кинь на форму компонент) WebBrowser и по DocumentCompleted

Код

            MessageBox.Show(webBrowser1.DocumentTitle.ToString()); //Название страницы
            MessageBox.Show(webBrowser1.Document.Links.Count.ToString()+" ссылок." ); //кол-во сылок
            MessageBox.Show(webBrowser1.DocumentText.ToString()); //текст документа (html)

Теперь нам надо узнать все ссылки
Код

            foreach (HtmlElement hrefElement in webBrowser1.Document.Links)
            {
                  /*
                   * Выводим сообщение, содержащее параметр href ссылки,
                   * заменяя в ней текст file:/// (если есть) -- это относится к
                   * относительным ссылкам.
                   */
                  MessageBox.Show(hrefElement.GetAttribute("href").Replace("file:///", ""));
            }


Добавлено @ 01:12 
Главная проблема -- перехват соединения (если ты хочешь, чтобы действие программы распространялось на любое приложение).
Конечно, если в качестве браузера будет использовать Ole-объект ослика (WebBrowser), то проблема быстро решается.

Мне самому интересно, как перехватывать соединение. Хочу сделать баннеро-порно-трояно-резку. Уже есть база на 118 тысяч "черных" хостов.
А вот как перехватить соединение и заблокировать в простейшем случае в .NET я не знаю smile 

Автор: Exception 1.5.2006, 09:47
Погодите. Никакой завязки на WebBrowser быть НЕ ДОЛЖНО! 

Автор: ivashkanet 1.5.2006, 18:53
План разработок:
1) web-сервис;
2) win-сервис.
Почему: ведь web-сервис, ИМХО, проще и к нему можно подключиться и без win-сервиса.
Да и работы там чуть-чуть. Вот только найти бы класс отвечающий на нижеприведенный вопрос.
Второй пункт, скорее всего, нужно будет решать по принципу прокси-сервера (хотя могу ошибаться)

Вопрос:Может кто знает какой класс может получить доступ к тексту удаленной страницы smile 

P.S.
Цитата(Exception @  1.5.2006,  09:47 Найти цитируемый пост)
Погодите. Никакой завязки на WebBrowser быть НЕ ДОЛЖНО

А ее и не будет smile  Это как бы старт.
Ведь я, пока, мало что в этом понимаю, а браузер должен был подсказать путь решения.
Мог но не подсказал. Обрывается, в рефлекторе, на
Код

[DispId(500)]
void Navigate2([In] ref object URL, [In] ref object flags, [In] ref object targetFrameName, [In] ref object postData, [In] ref object headers);

 smile 

 

Автор: Exception 1.5.2006, 22:38
Гляди в сторону System.Web.HttpRequest.. Это по памяти, точно не помню. 

Автор: VectorMan 2.5.2006, 06:05
Цитата(Softaz @ 1.5.2006,  01:07)

Мне самому интересно, как перехватывать соединение. Хочу сделать баннеро-порно-трояно-резку. Уже есть база на 118 тысяч "черных" хостов.
А вот как перехватить соединение и заблокировать в простейшем случае в .NET я не знаю smile

обычно всякие "резалки" трафика работают либо как локальный http-proxy, либо через API ядра для фильтрации пакетов 

Автор: ivashkanet 2.5.2006, 09:58
Цитата(VectorMan @  2.5.2006,  06:05 Найти цитируемый пост)
через API ядра для фильтрации пакетов 

Нее..., такое я мутить не буду  smile 
Цитата(VectorMan @  2.5.2006,  06:05 Найти цитируемый пост)
как локальный http-proxy

А вот такое, думаю, прокатит  smile 

P.S. VectorMan, может подкинешь инфу smile  

Автор: VectorMan 2.5.2006, 13:35
Цитата(ivashkanet @ 2.5.2006,  09:58)
VectorMan, может подкинешь инфу smile

примеров кода у меня нет, так что ищи сам :-)

ftp://ftp.rfc-editor.org/in-notes/rfc2616.txt rfc по http протоколу - точно лишним не будет 

Автор: Softaz 2.5.2006, 17:15
Цитата(VectorMan @  2.5.2006,  06:05 Найти цитируемый пост)
либо через API ядра для фильтрации пакетов 

Вот как раз про это.
А можно с NDIS в .NET работать? 

Автор: ivashkanet 2.5.2006, 19:58
Цитата(VectorMan @  2.5.2006,  13:35 Найти цитируемый пост)
вот rfc по http протоколу - точно лишним не будет 

VectorMan, не нужно мне знать ни про какой протокол, .Net должен знать его за меня.

P.S. В этом же и прелесть .Net. Ничего не знаю, но программы работают smile 
P.P.S. Я конечно утрирую, но суть та же. 

Автор: VectorMan 3.5.2006, 10:57
Цитата(Softaz @ 2.5.2006,  17:15)
А можно с NDIS в .NET работать?

не знаю. теоритически любой unmanaged код можно прикрутить :-)

Цитата(ivashkanet @ 2.5.2006,  19:58)
не нужно мне знать ни про какой протокол, .Net должен знать его за меня.

не думаю, что существует стандартный класс реализующий http-proxy, так что варианты либо писать свой, либо искать в инете готовое решение (http://www.mentalis.org/soft/projects/proxy/ например) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)