Baumi
1.09.2010, 11:38:05
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
1.09.2010, 11:40:05
Flash i sockety (badz xmlsocket)
Php + push ajax
Crozin
1.09.2010, 11:40:45
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ę
Baumi
1.09.2010, 11:54:07
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
1.09.2010, 11:56:20
No ale jaki widzisz problem? Bo ja nie widzę żadnego.
Baumi
1.09.2010, 12:08:52
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
1.09.2010, 16:18:43
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
1.09.2010, 19:57:55
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
1.09.2010, 20:47:30
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.