Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Auto update (request) ze strony servera
Forum PHP.pl > Forum > PHP
Baumi
Witam,

Istnieje w mechanizm pozwalający na odświeżenie strony (bądź jej części) wywołany po stronie serwera (coś jak servlety)?

Mój problem jest następujący: maszyna podpięta do Internetu wysyła dane do serwera gdzie aplikacja działająca jako daemon przetwarza dane i wrzuca je do bazy. Użytkownik wchodzi na stronkę odpala graf i obserwuje sobie na nim dane przychodzące z maszyny. Aktualnie odświeżanie następuje w regularnych interwałach wywoływane przez JavaScript. Czy istnieje jakiś sposób by (bez przepisywania aplikacji na Jave) oświeżanie grafu następowało tylko wtedy gdy pakiet dotrze z maszyny do aplikacji (ona wywoła refresh) bądź zostanie wrzucone do bazy (PostgreSQL - i tu jakiś trigger). Ma ktoś może jakiś pomysł, bo wujek Google nie bardzo wie jak to ugryźć?
wookieb
Flash i sockety (badz xmlsocket)
Php + push ajax
Crozin
WebSockets - ale to jeszcze nie jest technologia, z której można korzystać. Póki co niepozostaje Ci nic innego jak odpytanie serwera co jakiś czas.

EDIT: wookieb zasugerował Flash i sockety, ale to chyba tak samo ciekawa opcja jak przepisywanie na Javę smile.gif
Baumi
Dzięki za podpowiedzi. Problem jednak w tym, że flash za dużo tu nie pomoże ponieważ graf miał być tylko przykładem - użytkownik widzi w rzeczywistości całe raporty oparte na tych danych a tylko pewne ich części należało by odświeżyć w zależności od danych dostarczanych z maszyny. Hmmm... ciężka sprawa...
wookieb
No ale jaki widzisz problem? Bo ja nie widzę żadnego.
Baumi
Nie rozumiem pytania. Czy pytasz o powod dlaczego chce w ten sposob odswiezac? Otóż do sieci podpietych jest na razie ok. 20 urzadzen ktore wysylaja dane w regularnych odstepach. Jednak zmienia sie podejscie i teraz odstepy beda nieregularne i moga wynosic od kilku minut do kilku sek. Jezeli urzadzenie nic nie robi to nie chce przeciazac bazy zapytaniami o nowe dane (w zalozeniu jest kilka tyś maszyn + kilkanascie tyś użytkownikow). Dlatego chce odswiezac raporty tylko gdy sa nowe dane. Aplikacja jest jednak na tyle sporo (2 lata tworzenia kodu), że sporo czasu i pieniedzy zajelo by stworzenie czegos nowego badz tez przepisanie wszystkiego. To jest powod dla ktorego szukam innego rozwiazania.
Crozin
Prawdopodobnie najlepszym rozwiązaniem będzie dla Ciebie maksymalne zoptymalizowanie żądań wysyłanych przy pomocy AJAXa. Zamiast odpytywać każdorazowo bazę możesz utworzyć sobie plik z czasem ostatniej aktualizacji - jeżeli jest on większy niż ten przesyłany jako parametr żądania, wtedy dopiero baw się w nawiązywanie połączenia i wysyłkę danych.

Możesz też to żądanie wysyłać do bardzo prostego skryptu (który jest poza infrastrukturą całej aplikacji) - dosłownie 10 linijek kodu. On zwracałby tylko informację o tym czy coś się zmieniło, jeżeli tak może przekierować na właściwą akcję aplikacji zwracającą dane.
michaJlS
Zarówno z apletów Java jak i z animacji flasha możesz odpalać funkcje JavaScript. Więc dopisujesz sobie jakiś prosty skrypt w jednym albo drugim, który będzie utrzymywał upragnione przez Ciebie połączenie, po czym po odebraniu powiadomienia, wywołujesz funkcję js, która z kolei odpala żądanie ajaxowe. tadam. Tyle że w takim wypadku będziesz miał dużo zapytań w krótkim czasie. Pomyśl jeszcze o tym, jak te dane będą często aktualizowane, bo jeśli częściej niż co minutę, to może okazać się lepiej robić updt co minutę np. Niegłupim rozwiązaniem wydaje się też pomysł Crozina.
vokiel
Przejrzyj ten wątek: Komunikacja (powiadamianie) ServerSide -> ClientSide oparte na zdarzeniach
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.