Skip to content

Demonstrační příklady pro workshop o asynchronním zpracování v PHP.

License

Notifications You must be signed in to change notification settings

kolomicenko/workshop-async-php

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zadání

Vyhledejte všechny odkazy na zadané stránce. Pokud je nalezený odkaz URL na další stránku vyhledejte odkazy i na ní, atd. až do zadané hloubky.

Instalace

Příklady vyžadují docker-compose pro spuštění Redisu a workerů, dále poskytuje PHP pro spouštění web crawleru.

Stáhněte zdrojové kódy

git clone https://github.com/intraworlds/workshop-async-php.git
cd workshop-async-php

Nainstalujte závislosti

docker-compose run --rm composer install

Spusťte Redis a workera

docker-compose up -d

Pokud nechcete pracovat s dockerem zkuste instalaci bez dockeru.

Příklady

Applikace dostává tři parametry

crawl.php <type> <url> <depth>

Vrať všechny odkazy na stránce www.intraworlds.com

docker-compose run -T php bin/crawl.php sync https://www.intraworlds.com 0

Vrať všecny odkazy na stránce www.intraworlds.cz a odkazy na nich

docker-compose run -T php bin/crawl.php sync https://www.intraworlds.cz 1

Pozor! Opatrně s hloubkou prohledávání. Hodnoty nad 1 jdou už do tisíců odkazů

Typy

  • sync normální synchronní prohlédávání, stránky se načítají jedna za druhou
  • unique stejné jako sync, ale prohledává jen unikátní odkazy
  • worker jednotlivé stránky jsou zpracovány asynchronně v samostaném workeru, počet workerů je možné měnit a tím ovlivňovat rychlost prohledávání, zkuste docker-compose up -d --scale worker=3 viz náš první workshop
  • promise využívá asynchronní HTTP request (pomocí Guzzle). Odešle všechny dílčí requesty najednou a poté postupně čeká na jejich výsledek.

Úkoly

  1. upravte kód workeru tak, aby načítal pouze unikátní odkazy (viz typ unique), tip: využijte Redis, viz náš předchozí workshop, pozor na souběhy v případě více workerů
  2. odkomentujte řádek v souboru bin/worker.php, worker začne s 50% pravděpodobností padat před vykonáním práce (dochází ke zdrátě dat z fronty queue), upravte kód tak aby práce nebyla ztracena

Rada: při změně kódů workeru je nutné worker restartovat pomocí docker-compose restart worker

Tip: Prostudujte Redis command RPOPLPUSH

Bonusové úkoly

  1. upravte kód typu promis tak, aby vracel iterátor místo pole (výsledky budou ihned vidět)
  2. naimplementujte nový typ s použitím knihovny amphp/parallel
  3. naimplementujte nový typ s použitím knihovny react/react nebo amphp/amp
  4. naimplementujte nový typ s použitím rozšíření pthreads

Odevzdání

  • vytvořením pull requestu do tohoto repozitáře

nebo

Řešení

Řešení úkolů a mnoho dalších informací k dispozici na našem IWorkoshopu 27.11.2018 od 18 hodin v Beer Factory. Přijďte, vstup je zdarma!

Instalace bez Dockeru

Pro instalaci bez dockeru je třeba mít nainstalované PHP 7.2, Composer a běžící Redis.

  1. nainstalujte závislosti composer install
  2. změňte hostname ve funkci predis() na Váš Redis, např. tcp://localhost:6379
  3. ve vedlejším terminálu pusťte workera php bin/worker.php

Licence

MIT License

About

Demonstrační příklady pro workshop o asynchronním zpracování v PHP.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%