2010-09-15 9 views
6

Wiem, że istnieją technologie serwerów kometowych, które to robią, ale chcę napisać coś prostego i domowego.Wyzwalacz MySQL + powiadamiaj połączenie Apache/PHP z długim odpytaniem

Po wstawieniu rekordu do tabeli MySQL, chcę go jakoś przekazać te dane do serii długo odpytanych połączeń Apache za pomocą PHP (lub cokolwiek innego). Tak więc wielu ludzi "słucha" ich przeglądarki, a po drugie następuje WSTAW MySQL, jest wysyłane do przeglądarki i wykonywane.

Łatwym sposobem jest sprawdzenie, czy skrypt PHP odpytuje bazę danych MySQL, ale tak naprawdę nie jest to wypychanie z serwera i wprowadza niedopuszczalną kolejność niepotrzebnych zapytań do bazy danych. Chcę uzyskać te dane z MySQL do połączenia z długim pollingiem, w zasadzie bez żadnych zapytań słuchaczy.

Jakieś pomysły dotyczące wdrożenia?

Odpowiedz

0

Jest to coś, czego szukałem również od wielu lat. Nie znalazłem żadnej funkcji, w której serwer SQL wysyła komunikat na WKŁADKI, USUŃ i AKTUALIZACJE.

TRIGGERS może uruchamiać SQL na tych zdarzeniach, ale to nie ma sensu.

Chyba trzeba zbudować własny system. Możesz łatwo nadawać UDP z PHP (Example in first comment), problem polega na tym, że PHP działa po stronie serwera, a klienci są statyczni.

Domyślam się, że można wykonać aplet Javy działający na kliencie, nasłuchując komunikatu UDP, a następnie wywołać aktualizację strony.

To było tylko kilka myśli w chwili pisania ...

+0

Może spust mógł napisać coś jak memcached oraz PHP mógł odpytywać że? – phazei

+0

PHP jest statyczne, a nie "działa" w tle. Jest kilka sztuczek z książki, jak sprawić, by wyglądała jak "wątek", ale potem pojawia się kolejny problem, zaktualizuj stronę klientów. Powiedziałbym, że głosowanie musi być wykonane przez AJAX. Może wystarczyć do odpytywania dla daty ostatniej modyfikacji (zapisane przez wyzwalacze). Jeśli jest nowsza, odśwież stronę. –

2

staram wszystkie rodzaje pomysłów na rozwiązanie tego jak dobrze i jedynym sposobem, aby wyjąć odpytywanie zapytań SQL ma odpylić plik zamiast tego. Jeśli wypełnienie wynosi 0, kontynuuj pętlę. Jeśli plik ma wartość 1, uruchom zapytania pętli sql i wyślij je do użytkowników. Dodaje kolejny poziom złożoności, ale myślę, że oznacza to mniej pracy mysql, ale samo dla Apache'a lub co zapętlającego daemona. Możesz również wysłać komendę do stylu "komety" demona, ale będzie to również dotyczyło każdego żądania z tego, co zobaczyłem na temat działania gniazd, więc mam nadzieję, że ktoś znajdzie rozwiązanie tego problemu.

0

MySQL prawdopodobnie nie jest właściwym narzędziem tego problemu. Regilero zasugerował zmianę twojego DB, ale prostszym rozwiązaniem może być użycie czegoś takiego jak redis, który ma funkcję pub/sub.

http://redis.io/topics/pubsub

Powiązane problemy