Скачиваний:
36
Добавлен:
15.02.2021
Размер:
804.3 Кб
Скачать

УпулаURLнедолжнобытьмаксимальногоразмера.Дляэтогонужен

 

 

списокнеобработанныхURL

 

-адресов,списокужеотсканированн

ыхURL -

адресовиещеодноп,которомлебудетнапи. саноже

 

 

 

 

2Чтобы. выполнитьвеб

 

-сканированиенескп ,необтокахль иходимо

 

создклаCrawlerTask,сстькоторыйреализуетинтерфейсRunnableКаждый.

 

 

экземплярCrawlerTaskдолжиметьссылнаодинэкуз

 

 

 

емпляркласса

URLPool,котбылописанрыйвыше.Обративнимание( нато,чвсето

 

 

экземплярыклассаCrawlerTaskиспользединстве!)уПрилютнныйцип

 

 

работывеб

-сканеразаключаетсявследующем:

 

 

1)Получение. парыURL

 

-Depthизпула,ожидаявслучесли, па

ране

будетсразудоступна.

 

 

 

 

2)Получение. веб

 

-страницыпоURL

-адресу.

 

3)Поиск.настраницедругихURL

 

 

-адресов.Длякаждогонайденного

 

URL-адр,необходимосадобанопарувитьURLую

 

-DepthкпулуURL

-адресов.

Новаяпарадолжнаиметьглубинуединицубольш

 

 

е,чемглубинатекущего

URL-адреса,покоторомупроисходитсканирование.

 

 

4)Переход. кшагу1.

 

 

 

 

Данныйциклдопрожендотехпорлжаться,покавпулеостанется

 

 

парURL

-Depth.

 

 

 

 

3Так.каквеб

 

-сканербудетпо неождатькотороеличествопотоков,

 

 

измените программутак,чтобыонапринимтретийпарамчерезла тр

 

 

команднстр, бтопределятьурыйдетюколичествопорождаемых

 

 

потоковвеб

-сканера.Функцияmainдолжнавыполнятьследующиезадачи:

 

 

1)Обработа. аргументыкоманднс .Сь кипобщитьйльзователю

 

о

любыхошибкввод. ах

 

 

 

 

2)Создатьэкземпляр. пулаURL

 

 

-адресовипоместитьуказанный

 

пользователемURL

-адресвпулг убиной0.

 

 

 

3)Создатьуказаннпользователем. количествозадач(потоковдляих

 

выполнения)длявеб

-сканера.Кажзапоисковогодачеойро

ботанужнодать

ссылкунасозданныйпулURL

-адресов.

 

 

4)Ожидать. завершениявеб

-сканирования.

 

5)ВывестиполучспURLисоквшийся

 

-адрес,котбылионайденыврые.

 

4Синхронизируйте. объектпулаURL

 

-адресоввовсехкритических

точках,таккактеперькоддолжен

бытьориентирнамног.опоточностьван

 

5Веб.

-сканердолженпостоянноопрашиватьпулURL

-адресов

случае,еслионпуст.Вместоэтогпустьониожидаютвслучае,когданет

 

 

доступныхURL

-адр.Ресовализуйэто,использмеwait()твнодеу«getятри

 

URL»вс

лучае,еслиниодинURL

-адресвнастоящеевремянедоступен.

Соответственно,метод"addпулаURL"

 

-адресовдолжениспользовать

функциюnotify()вслучае,когдановыйURL

 

-адресдобавленкпулу.

 

Обративниманиенато,чптовебтоки

 

-сканерасамибудут

выполнятькакие

 

иэтихбозопераций

 

синхронизации/ожидания/уведомлен.Потжепричй,чтопулиURLяне

 

-

адресовскрываетдеталитого,какURL

 

-адресахранятсяиизвлекаются:

инкапсуляция!Точнотакже, акввашейреализациипользователипула

 

 

URL-адресовнедолжнызнатьдеталяхреализации,такжеондолжны знатьодеталяхорганизациипотоков.

Советыпопроектированию

Вотнексоветдляторуспешноговыполнениялабораторнойработы

№8:

Выможетеиспольчастькодаизлабораторнойоватьработы№7с

небольшимизменен.КлассURLDepthPairиемзннужное.нятьОсновные

отличиявтом,чтокзагрузкидURL -адресаисканистраницыование находиттеперьвкла,которыйсреалсеяRunnableикодзуетбудетполучатьи

добавлятьURL -адресавэкземпляреURLPool.

Выдолжнысинхроквнстнизироватьуполямтренним

URLPool,посколькунимбудутобращатьсясразунесколькопотоков.Самый простойподходзаключаетсявиспользованииметодовсинхронизации.Не

нужсинхроконструкизирURLPool!Подутомвать, райте какие метдолжныбытьдысинхронизированы.

НапишитеметоURLPoolдляиспользованияыметодов

wait()и

notify()так,чтобыпотокисканерам глижидатьпоявленияновыхURL

-

адресов.

 

 

ПустьURLPoolопределяет,какиеURL

-адрепопвсаписокдают

необработанных URL-адрес,исхизглубиныовдякаждогоURL

-адреса,

добавляемогопул.Ес убинаURL

-адрмемаксимньшеса,добавльтеной

парувочередьожи.ИначеобавьтенияURL

-адресвсписокобработанных,

несканируястраницу.

 

Самаясложнаячастьданнойлаборатор

нойработызаключаетсяв

поискемомдлявыходаизнтапрограммы,когдабольшенетURL

-адресовдля

сканирования.Втакомслучаевсепотокибудутрежимеожиданиянового

 

URL-адресавURLPoolДляэтогорекомендуется,чтобы. URLPoolотслеживал,

 

сколькопотоко

вожидаетновыйURL

-адрес.Поэтнеобходимодобавитьму

полетипакотороеint,будв личиватьсянепосредственнопередвызовом

 

wait()иуменьшатьсясразупослевыходаизрежимаожидания.Создавсчетчик,

 

нужнореализмет,котвдватьозвращаетрыйколичест

воожидающих

потоков.Отслеживаколичествопотоковвыможетефункцииьmain()в

 

случае,еслиобщееколичествопотоковравноколичествупот, рое

 

вернулсоответствующийметнеобходимо, вызватьSystemдля .exit()

 

завершенияработы.Проверкуможно

выпотаймерулнясин( ьервалом1

сек),чтоприведэффективнойкболееработепрограммы.

 

Дополнительноезадание

ОбновитепаруURL -Depthдляиспокльзованияjavaасса.net.URL

произведитесоответствующиеизмвебнения

-сканередлятого,чтобыон

соответствовалиотносительнымURL

-адресам,иабсолютным.

ВыходизпрограммысиспольвызовSystemанием.exit()

-

грубаяоперация.Найдитеспосболрректногок бвыходаизпрограммы.

 

РеализуйтесписокURL

-адрес,котбылиопврыеосмотрены,и

избегайтев

озвратакним.ИспользуйтеодинизклассовколлjavaКакойкций.

-

тонабор,котпорыйддержипостоянноевремяпоиаетставку,будетка

наиболееподходящим.

Добавьтедругойдополнительныйпаракомстрокиетранднойдля

того,чтобыопределить,скольковреме

нипотоквеб

-сканерадолженжд ть

сердлявозвратаератребуемойвеб

-страницы.