Vytvoření posluchače událostí v PHP, čeká na obsah XML

hlasů
18

Musím vytvořit posluchače událostí. Jsem nováček, takže být laskavý :)

V podstatě jsem na page1.php (php soubor); Chci uvnitř smyčky jít zkontrolovat page2.xml (soubor XML) pro nějaké informace, které by měly být přijímán v určitém okamžiku. Buď nechte ji po celou dobu, nebo počkat a každých 5 minut nebo tak, aby zjistil, jestli byl přijat tam nějaké informace. Jeden z nich pracuje pro mě.

Je-li přijato žádné info po několika minutách, pak chci, aby znovu spustit smyčku (dokud není přijat), v opačném případě, při pohybu vpřed a udělat něco s mým nově přijaté informace. Tato část nemám problém s, právě tato událost sama o sobě posluchač. Nemohl jsem najít funkci bych měl používat kdekoliv. :( Musím zkontrolovat a načíst obsah souboru XML každý tak často pouze.

Nejsem si tak jistý, jak bych měl jít o to, jestli tam není jen funkce, která dělá to, ale nemohl jsem najít mnoho, když jsem hledal „posluchače události php“.

Jakákoliv pomoc by ocenili: odkaz na návody / ukázkový kód / i jen mi říct, co klíčová slova bych měl hledat, nebo to, co potřebují naučit jako první v pořadí, jak to udělat.

Dík!

Položena 21/12/2011 v 23:17
uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

No, nejprve je třeba pochopit terminologii, kterou používáte. PHP není událost-řízený jazyk, to je požadavek-řízený jazyk. Žádost přichází do webového serveru, PHP jej analyzuje a odpověď je odeslána zpět žadateli. V žádném okamžiku existují události spouští, které lze zpracovat nebo zvládnout. Můžete implementovat svůj vlastní „systém událostí“, ale nakonec je to mnohem více práce, než jaké jsou vaše use-case s sebou nese.

Nejlepším řešením je pravděpodobné, že využití AJAX a průběžně o žádosti do PHP skriptu, dokud se vrátit data, která vám konkrétně zajímá. Nakonec budete muset naučit o XMLHttpRequestobjektu JavaScriptu. Poté, co jste pochopili, jak vytvořit asynchronní požadavky na využití JavaScript můžete podívat na setInterval()způsobu, jak se opakovaně podat žádost.

Poté, co můžete udělat opakovaně asynchronní požadavky by mělo být poměrně jednoduchý proces vytváření webové stránky, kde si můžete vyvolat žádosti AJAX, které mají být odeslány.


Není třeba pro smyčku v PHP kódu. Smyčka se účinně provádí na druhém konci. Zde je textová workflow, které můžete sledovat:

  1. Přejít na web určený ke spuštění vaše AJAX hovory a spouštět je.
  2. Udělej si svůj požadavek asynchronní do vašeho PHP skriptu.
  3. Uvnitř vašeho PHP skriptu otevřít soubor XML a kontrolu nezbytnou obsah.
  4. Vracet odpověď ve formě objektu JSON. Jedna odpověď může znamenat data nebyla aktualizována, druhá reakce znamená, že data byla aktualizována.
  5. Analyzovat odpověď, pokud data nebyla aktualizována opakujte postup od kroku (2). Pokud byly údaje aktualizovány přejděte ke kroku (6).
  6. Zobrazit slavnostní pozdrav, aby vaše data byla aktualizována nebo oznámení, že jsme stále čeká na údaje, které mají být aktualizovány. Možná, že můžete mít tolik pokusů stejně, stranou.
Odpovězeno 21/12/2011 v 23:57
zdroj uživatelem

hlasů
0

Udělal jsem něco takového psát doručené analyzátor v PHP. Jsi nejlepší možností je:

Kód page1.php, ve kterém stačí provést 2 věci: číst XML z page2.xml, a pokud tam je něco „nového“ jen spustit kód datového-analýze.

Sestavime Cron úlohy (pokud jste pod Linuxem) spouštět každých 5 minut nebo tak (příkaz Cron je něco jako: php /path/to/page1.php). Stejně tak, pokud jste se systémem Windows můžete nastavit naplánované úlohy a spustit stejný příkaz. Uvědomte si, že úplná cesta k instalaci PHP by měl být v PATHproměnné prostředí.

Odpovězeno 22/12/2011 v 00:20
zdroj uživatelem

hlasů
1

Udělal jsem následující:

Automaticky uloží do databáze každý čas něco nového vešel.

Pak běžel php smyčku, která každých pár minut zkontrolovat, jestli tam je něco nového v databázi, která se vejde parametry této nové akce (včetně že happenned v časovém rámci několika posledních minut). Použil jsem flush();a pak sleep(120);ve smyčce získat smyčku udržují v provozu každých pár minut, dokud nebude nová informace přišla v tom případě se break();nebo die();.

Odpovězeno 03/01/2012 v 23:57
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more