Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопоточный браузер на java, Каждый поток - отдельный браузер 
:(
    Опции темы
serghd
Дата 30.10.2009, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Возникла такая необходимость как написание многопоточной программы на java, каждый из потоков которой мог бы оперировать стандартными средствами среднего браузера. Наиболее важные - это пропись прокси-серверов, работоспособность javascript, каждый поток должен уметь это делать. Для c++ такая возможность может быть доступна при использовании webkit. Для явы webkit не подойдёт по причине обязательного наличия mac os. Знает ли кто-нибудь удобные фреймворки под java для имитации браузеров с обязательной поддержкой многопоточности? smile 
PM MAIL   Вверх
LSD
Дата 2.11.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



А что тебе от него вообще нужно? Я так понимаю раз нужен JS, то рендеринг нужен? Поддержка Flash, Silverlight и т.п. нужна?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
serghd
Дата 2.11.2009, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Рендеринг - не знаю что это. Поддержка js конечно нужна, Flash, Silverlight и т.п. - нет. Самое главное, чтобы можно было ставить движок на много потоков. Пока нашёл что-то приближённое это JRex и работа с браузером системы посредством JDesktop. Но ни то, ни другое пока не проверял на предмет поддержки многопоточности и доступности базовых св-св браузера. Повторюсь: это пропись прокси-серверов (их основных типов), от имени которых будет "вход на сайты". В инфе про swt webkit  для java это не увидел, надо будет проверять руками, а так, на первый взгляд слишком мало у него возможностей. Вобщем хотелось бы услышать мнения от тех, кто сталкивался с подобной проблемой, чтобы не делать лишнего. Пока остановился на Qt Jambi. 

Это сообщение отредактировал(а) serghd - 2.11.2009, 18:26
PM MAIL   Вверх
ivanovpv
Дата 2.11.2009, 19:47 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


Профиль
Группа: Участник
Сообщений: 639
Регистрация: 26.1.2005
Где: Москва

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



Цитата(serghd @  30.10.2009,  14:07 Найти цитируемый пост)
Возникла такая необходимость как написание многопоточной программы на java, каждый из потоков которой мог бы оперировать стандартными средствами среднего браузера.

Настораживает формулировка... Браузер решение из области UI. А многопоточность - внутренняя архитектура приложения. Как говорится отношения к друг-другу практически не имеют.
Тут либо вопрос - как реализовать браузер на Java или же как сделать многопоточное приложение из однопоточного. Вы как-то определитесь чего вы все таки хотите. smile 


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
serghd
Дата 2.11.2009, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



каждый из потоков которой мог бы оперировать стандартными средствами среднего браузера...

Это сообщение отредактировал(а) serghd - 2.11.2009, 20:09
PM MAIL   Вверх
Temdegon
Дата 4.11.2009, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если вам нужно просто в тыщу потоков постить формы через прокси, и получать и обрабатывать контент, то для этой цели хорошо подойдет  Apache HTTP Client. Очень удобная либа с подробной документацией и примерами. Вроде в ней сразу встроен способ многопоточной работы, но я поленился разбираться. Просто создал пул потоков. Каждый поток создает экземпляр HTTPClient, постит форму и парсит результат.
С помощью этой либы я писал примитивный подбиральщик паролей к формам через прокси, прогу для автоматического поиска и проверки прокси-серверов, агрегатор объявлений с сайтов. И все это работало в 50-500 потоков и сложностей реализации нет никаких.
Если вам нужно что-то другое, то пожалуйста изложите подробно, что конкретно и зачем вам нужно.



PM MAIL   Вверх
serghd
Дата 4.11.2009, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Нет, вроде бы не совсем это. Мне надо чтобы при загрузке страниц сайта срабатывал js, html - для прорисовки (соответственно и учёта ими "реальной" посещаемости) счётчиков, партнёрок и т.п. Т.е. надо именно загружать контент сайтов через прокси, а не отправлять определённые заголовки и поля для брута. 

Это сообщение отредактировал(а) serghd - 4.11.2009, 01:01
PM MAIL   Вверх
Temdegon
Дата 4.11.2009, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну в таком деле я вам плохой помощник, т.к. вообще не представляю, как накручиваются счетчики и как они работают. Но загружать и исполнять весь контент как-то примитивно. Лучше все-таки разобраться, как на самом деле работают эти счетчики...
PM MAIL   Вверх
serghd
Дата 4.11.2009, 01:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как работают они я знаю (т.к. 4 года до этого писал сайты и cms). Если яваскрипт - то после прорисовки яваскриптом определённого url, на сайт загружается, в большинстве случаев, картинка. В момент её отдачи сервером (т.е. когда происходит выдача изображения), сам сервер может считать нужную ему информацию, например ip клиента, и произвести действие  - напр. +1 к счётчику хостов, если это уникальный ip за сегодня для этого сайта. Т.е. в этом случае движок js обязателен. Есть аналог такой программы на delphi (писала сторонняя контора), но там каждый "посетитель" - отдельный процесс операционки. Даже очень хороший cpu не в состоянии потянуть более 150-ти. Вот это действительно примитивно... Я в java новичок и понимаю что такая прога для начала, наверное, слишком крута для меня, но всё же. По крайней мере подмену ip уже организовал, осталось дело за многопоточностью. 

Это сообщение отредактировал(а) serghd - 4.11.2009, 01:33
PM MAIL   Вверх
Temdegon
Дата 4.11.2009, 01:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну получается, что контент страницы тебе как бы и не нужен. Тебе нужно просто загрузить нужную картинку, подставив  в HTTPClient прокси, куки и что бы он определялся на сервере как какой-то конкретный браузер. Если нужно более-менее универсально, то можно сначала грузить страницу HTTPClient-ом, потом выдрать из нее все ссылки и пройти клиентом по этим ссылкам.

Добавлено через 6 минут и 4 секунды
Цитата

Есть аналог такой программы на delphi (писала сторонняя контора), но там каждый "посетитель" - отдельный процесс операционки. 

Ну если грузить контент, отрисовывать HTML и исполнять JS для каждого потока, то тут никакого железа не хватит. Процессы операционки тажелее, чем потоки, и ими сложнее управлять, но переход на потоки мало что изменит, если полностью эмулиовать браузер. 

PM MAIL   Вверх
serghd
Дата 4.11.2009, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Это сообщение отредактировал(а) serghd - 4.11.2009, 01:49
PM MAIL   Вверх
Temdegon
Дата 4.11.2009, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Впрочем HTTPClient с этим наверно тоже справится

В общем, я бы делал так
задаем в конфиге для проги шаблоны всего, по чему нужно переходить: шаблоны урлов партнерок и счетчиков.
грузим HTML и JS, ищем в нем похожие урлы и переходим по ним. Таким образом и траф экономится и все что нужно обходится.
Каждый "клиент" - отдельный класс-поток.
Создаем пул потоков, устанавливаем кол-во параллельно работающих потокв.
Создаем дофига экземпляров, пихаем их в пулл потоков. 
В основном потоке в цикле со слипом следим за пулом и подбрасываем туда новые потоки, по мере его освобождения.
Проблема будет если  урл генериться в JS. как это воспроизвести - не знаю. 
PM MAIL   Вверх
LSD
Дата 5.11.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Temdegon @  4.11.2009,  02:04 Найти цитируемый пост)
грузим HTML и JS, ищем в нем похожие урлы и переходим по ним

Слишком примитивно, JS может вычислять URL (конкатенацией или еще как). А уж если код использует Flash для счетчиков, то вообще...


В принципе все счетчики работают по HTTP, и значит если подробно изучить работу страницы, можно просто сделать ряд HTTP запросов и все будет ОК. Но при изменениях в странице это все потребует переделки программы.
Либо если писать универсальную вещь, то нужно использовать готовый браузерный движок, типа: WebKit for SWT.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
serghd
Дата 5.11.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(LSD @ 5.11.2009,  13:30)
Цитата(Temdegon @  4.11.2009,  02:04 Найти цитируемый пост)
грузим HTML и JS, ищем в нем похожие урлы и переходим по ним

Слишком примитивно, JS может вычислять URL (конкатенацией или еще как). А уж если код использует Flash для счетчиков, то вообще...


В принципе все счетчики работают по HTTP, и значит если подробно изучить работу страницы, можно просто сделать ряд HTTP запросов и все будет ОК. Но при изменениях в странице это все потребует переделки программы.
Либо если писать универсальную вещь, то нужно использовать готовый браузерный движок, типа: WebKit for SWT.

Если это его все настройки, то они очень скудны, по крайней мере в сравнении с qt jambi. Даже подстановку проксей не сделать.
PM MAIL   Вверх
serghd
Дата 29.11.2009, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Temdegon @ 4.11.2009,  01:38)
Ну получается, что контент страницы тебе как бы и не нужен. Тебе нужно просто загрузить нужную картинку, подставив  в HTTPClient прокси, куки и что бы он определялся на сервере как какой-то конкретный браузер. Если нужно более-менее универсально, то можно сначала грузить страницу HTTPClient-ом, потом выдрать из нее все ссылки и пройти клиентом по этим ссылкам.

Добавлено @ 01:44
Цитата

Есть аналог такой программы на delphi (писала сторонняя контора), но там каждый "посетитель" - отдельный процесс операционки. 

Ну если грузить контент, отрисовывать HTML и исполнять JS для каждого потока, то тут никакого железа не хватит. Процессы операционки тажелее, чем потоки, и ими сложнее управлять, но переход на потоки мало что изменит, если полностью эмулиовать браузер.

А HTTPClient сможет загружать сайты со всей их прорисовкой графики, использованием js и всего прочего не отображая их визуально? Средства для работы с полученным контентом имеются (например поиск текста, обновление страницы и т.п.)?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

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


 




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


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

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