Zdecydowanie sugerowałbym zainwestowanie trochę czasu w Comet, ale nie znam rzeczywistej implementacji ani biblioteki, z której mógłbyś skorzystać.
Dla pewnego rodzaju „panelu sterowania callcenter” aplikacji internetowej, która obejmowała aktualizację statusu agenta i kolejki połączeń dla działającego Callcenter, opracowaliśmy wewnętrzne rozwiązanie, które działa, ale jest daleko od biblioteki, z której można by skorzystać.
To, co zrobiliśmy, to zaimplementowanie małej usługi na serwerze, która komunikuje się z systemem telefonicznym, czeka na nowe zdarzenia i utrzymuje zdjęcie sytuacji. Ta usługa zapewnia mały serwer WWW.
Nasi klienci sieciowi łączą się przez HTTP z tym serwerem sieciowym i proszą o ostatnie zdjęcie (zakodowane w XML), wyświetlają je, a następnie kontynuują, prosząc o nowe zdjęcie. W tym momencie serwer sieciowy może:
- Zwróć nowe zdjęcie, jeśli istnieje
- Zablokuj klienta na kilka sekund (30 w naszej konfiguracji), czekając na wystąpienie jakiegoś zdarzenia i zmień zdjęcie. Jeśli w tym momencie nie zostało wygenerowane żadne zdarzenie, zwraca to samo zdjęcie, tylko po to, aby połączenie pozostało żywe, a nie przekroczono limitu czasu klienta.
W ten sposób, gdy klient sonduje, otrzymuje odpowiedź w ciągu maksymalnie 30 sekund. Jeśli nowe zdarzenie zostało już wygenerowane, pobiera je natychmiast), w przeciwnym razie blokuje się do momentu wygenerowania nowego zdarzenia.
Zasadniczo jest to odpytywanie, ale dość sprytne odpytywanie, aby nie przegrzać serwera internetowego. Jeśli Comet nie jest twoją odpowiedzią, jestem pewien, że można by to zaimplementować przy użyciu tego samego pomysłu, ale w szerszym zakresie wykorzystując AJAX lub kodowanie w JSON, aby uzyskać lepsze wyniki. Zostało to zaprojektowane przed erą AJAX, więc jest wiele do zrobienia.
Jeśli ktoś może zapewnić rzeczywistą lekką implementację tego, świetnie!