Wzorzec obserwatora przez HTTP i TCP / IP (klient-serwer)

9

Mam serwer i wielu klientów (około 50 klientów), którzy łączą się z tym serwerem w oparciu o aplikację internetową, która oczywiście oparta jest na protokole HTTP, który z kolei używa protokołu TCP / IP (popraw mnie, jeśli się mylę, bo ja nie jestem naprawdę dobry w sieci).

Problem polega na tym, że powinienem opracować mechanizm ostrzegania, w którym gdy ktoś prześle formularz z niebezpiecznymi wartościami, menedżer (który jest również połączony za pośrednictwem tej samej aplikacji internetowej) powinien otrzymać na ekranie wyskakujące ostrzeżenie, prawie prawdziwe -czas (natychmiast).

Ponieważ jednak protokół HTTP jest bezstanowy, jestem trochę zdziwiony. Nie wiem jak to zaimplementować.

Jednym z rozwiązań może być użycie JavaScript wraz z setInterval()funkcją do pobierania danych z serwera co sekundę. Ale wydaje mi się to trochę brudne i nieprofesjonalne.

Czy macie jakiś pomysł na wdrożenie innego rozwiązania?

Saeed Neamati
źródło
Ten post może pomóc stackoverflow.com/questions/640488/…
NoChance 12.09.11
Jakiego rodzaju klienci? Cienkie (oparte na przeglądarce) klientów lub ciężkich klientów?
ysdx
@ysdx, pomyśl klientów. Klienci tylko z obsługą przeglądarki.
Saeed Neamati,

Odpowiedzi:

4

Powinieneś użyć pewnego rodzaju aneksu push (patrz kometa ), aby powiadomić klientów. Może to wyeliminować potrzebę odpytywania, po prostu utrzymuje otwarte połączenie, którego można użyć do powiadamiania przeglądarki o zaistniałych zdarzeniach. Nie działa to jednak we wszystkich przeglądarkach. W takich przypadkach wracasz do „długiego odpytywania”.

Sokół
źródło
6

Myślę, że właśnie z tego powodu stworzono WebSockets . Jeśli nie potrzebujesz zgodności ze starszymi przeglądarkami, możesz użyć tej opcji zamiast sondowania. Prawdopodobnie powinieneś użyć sondowania jako rezerwowego.

Nie jestem pewien, jak stabilna jest specyfikacja / implementacje w tych dniach (jeszcze niedawno nie była bardzo stabilna). Wygląda na to, że najnowsza specyfikacja została zaimplementowana w Firefox 6 i Chromium 14.

ysdx
źródło