Tworzenie detektor zdarzeń w PHP, w oczekiwaniu na zawartość XML

głosy
18

Trzeba utworzyć detektor zdarzeń. Jestem początkujący więc być miły :)

Zasadniczo jestem na page1.php (plik php); Chcę wewnątrz pętli iść sprawdzić page2.xml (plik XML) do pewnych informacji, które powinny być odbierane w pewnym momencie. Albo sprawdzić go przez cały czas, czy czekać i co 5 minut lub tak, aby zobaczyć, czy niektóre informacje zostały tam odbierane. Każda z nich pracuje dla mnie.

W przypadku braku informacji zostało odebrane po kilku minutach, a następnie chcę, aby uruchomić ponownie pętlę (dopóki nie zostanie odebrane), w przeciwnym razie, iść do przodu i zrobić coś z moim nowo otrzymanej informacji. Ta część nie mam problemu z, tylko sam detektor zdarzeń. Nie mogłem znaleźć funkcję I należy używać w dowolnym miejscu. :( I tylko trzeba sprawdzić i pobrać zawartość pliku xml tak często.

Nie jestem więc pewien, jak mam iść na ten temat, jeśli nie jest to funkcja, która to robi, ale nie mogłem znaleźć wiele, gdy szukałem dla „php” detektora zdarzeń.

Każda pomoc będzie mile widziane: odniesienie do kodu tutoriale / sample / nawet po prostu mi powiedzieć, jakie słowa kluczowe powinny być szukasz lub co muszę najpierw nauczyć się w tym celu.

Dzięki!

Utwórz 21/12/2011 o 23:17
użytkownik
W innych językach...                            


3 odpowiedzi

głosy
1

Cóż, najpierw należy zrozumieć terminologię, której używasz. PHP nie jest językiem zdarzeniami, jest to język prośba o napędzie silnikowym. Wniosek wchodzi do serwera WWW, PHP analizuje go i odpowiedź jest wysyłana z powrotem do żądającego. W żadnym momencie nie są wywoływane zdarzenia, które można przetwarzać lub uchwyt. Można zaimplementować własny „system zdarzeń”, ale ostatecznie jest to znacznie więcej pracy niż korzystanie-case wiąże.

Najprościej jest prawdopodobne wykorzystanie AJAX i ciągłego wykonywania żądań do skryptu PHP, aż wrócisz dane, które szukasz. Ostatecznie trzeba będzie dowiedzieć o XMLHttpRequestobiektu JavaScript. Po zrozumieć jak zrobić asynchronicznych wywołań z wykorzystaniem JavaScript można spojrzeć na setInterval()metody, jak wielokrotnie dokonać zamówienia.

Kiedy można dokonać wielokrotnie asynchronicznych żądań powinien być stosunkowo prosty proces tworzenia strony internetowej, gdzie można wywołać żądań AJAX mają być wysłane.


Nie ma potrzeby stosowania pętli w kodzie PHP. Pętla jest skutecznie odbywa się na drugim końcu. Oto workflow tekstowe, które można śledzić:

  1. Idź do miejsca przeznaczonego do uruchomienia połączeń AJAX i wywołać je.
  2. Dokonać żądania transmisji asynchronicznej do skryptu PHP.
  3. Wewnątrz skryptu PHP otworzyć plik XML i sprawdzać niezbędnej zawartości.
  4. Zwraca odpowiedź w postaci obiektu JSON. Jedną z odpowiedzi może oznaczać danych nie została zaktualizowana, a druga odpowiedź oznacza dane zostały zaktualizowane.
  5. Przetwarza odpowiedź, jeśli danych nie została zaktualizowana powtórki z etapu (2). Jeśli dane zostały zaktualizowane przejdź do kroku (6).
  6. Wyświetla uroczysty powitania, że ​​dane zostały zaktualizowane lub zawiadomienie, że wciąż czeka na dane, które mają zostać zaktualizowane. Być może masz liczbę prób, jak również, z boku.
Odpowiedział 21/12/2011 o 23:57
źródło użytkownik

głosy
0

Zrobiłem coś takiego pisania parser skrzynki w PHP. Jesteś najlepszym rozwiązaniem jest:

Kod page1.php, w którym po prostu trzeba zrobić 2 rzeczy: odczyt danych XML page2.xml, a jeśli coś jest „nowy” tylko wykonanie kodu danych, analizowania.

Skonfiguruj Cron pracy (jeśli jesteś pod linux), aby wykonać co 5 minut lub tak (komenda Cron jest coś takiego: php /path/to/page1.php). W ten sam sposób, jeśli używasz systemu Windows można skonfigurować zaplanowane zadanie i wykonać taką samą komendę. Należy pamiętać, że pełna ścieżka do instalacji PHP powinny być w PATHzmiennej środowiskowej.

Odpowiedział 22/12/2011 o 00:20
źródło użytkownik

głosy
1

Zrobiłem, co następuje:

Automatycznie zapisywane w bazie danych za każdym razem coś nowego dołączonej.

Potem pobiegł pętlę php, które co kilka minut sprawdzane, aby zobaczyć czy jest coś nowego w bazie danych, która pasuje do parametrów tego nowego zdarzenia (w tym, że happenned w terminie w ciągu ostatnich kilku minut). Kiedyś flush();, a następnie sleep(120);w pętli, aby uzyskać pętlę biec co kilka minut, aż nowa informacji przyszedł w tym przypadku będzie to break();albo die();.

Odpowiedział 03/01/2012 o 23:57
źródło użytkownik

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