Jakie jest najlepsze rozwiązanie? [PUSH]

Cześć, mam następujący problem:

Użytkownik z poziomu strony łączy się z systemem eksperckim działającym na innym serwerze (tylko po autoryzacji ma możliwość nawiązania połączenia). Komunikacja z systemem eksperckim wygląda tak że użytkownik udziela odpowiedzi na pytania wysyłane przez system i na podstawie jego odpowiedzi podaje on wynik w czasie rzeczywistym… Używam w tym celu technologii PUSH…

[list=1]

[*]Najpierw użyłam metody ‘long-polling’, ale w niej skrypt php był wywoływany wielokrotnie, co powodowało zrywanie połączenie…

[*]Obecnie zaimplementowałam to używając ‘Server Sent Events’ - połączenie jest trzymane do odświeżenia strony, ale komunikacja jest jednokierunkowa (z systemu na stronę)…

[*]Obecnie więc się skłaniam do wykorzystania WebSockets (stałe połączenie, dwu-kierunkowe), ale implikuje to konieczność implementacji (lub wykorzystania czyjejś) serwera do WebSocket po stronie systemu (w C lub PHP)…

[/list]

Więc, jak byście Wy rozwiązali ten problem? Utrzymywać połączanie z serwerem? Czy może łączyć się za każdym razem przed wysłaniem wiadomości? Może macie jakąś lepszą metodę?

Z góry dzięki :)

A może wykorzystać po prostu AJAX? powinno się sprawdzić :slight_smile:

Jeżeli zależy Ci na stałym połączeniu to może napisz jakiś mały aplet w Javie… Wtedy jeszcze potrzeba aplikacji po stronie serwera, która będzie obsługiwała połączenia socketowe.

Stale połączenia sa zazwyczaj potrzebne do strumieni danych dlatego jeżeli zależy nam na krótkiej odpowiedzi to zapytanie w tle do skryptu ph z poziomu javascript powinno wystarczyć.

Różnica w czasie pomiędzy technologia AJAX a trzymaniem stałego połączenia jest niewielka w tym przypadku.

Aplet w Javie był by dobrym rozwiązaniem, ale wiszą nade mną wymagania projektowe i nie mogę jej użyć. No zrealizowałam wersję w której puszczam zapytanie do skryptu za pomocą API XMLHttpRequest, ale potem doszłam do wniosku że lepsze będzie stałe połączenie. Masz rację że w tym wypadku nie będzie dużej różnicy w czasie odpowiedzi, ale wolałam uniknąć tego rozwiązania, bo szczerze mówiąc nie wiem na ile mogę obciążyć back-end na którym mam system ekspercki (to rozwiązanie ma być wdrożone), a to pogorszy skalowalność…

Dzięki za radę, w sumie teraz bardziej się skłaniam do tego żeby dopisać kod w C na back-end’zie do serwera tak żeby sobie radził z tym ciągły łączeniem się i rozłączaniem użytkowników…

Cześć,

nie ma raczej “najlepszego” rozwiązania :) a jeśli chodzi o aplet w Javie, to właśnie po to powstają technologie typu comet, żeby nie trzeba było robić takich rzeczy…

Jakiego rozwiązania próbowałaś implementując long-polling?

Słyszałem pozytywne opinie na temat APE (Ajax Push Engine).

Może implementacja long-polling w node.js?

XMPP + BOSH z PubSub lub PEP

Powodzenia

Zrealizowałam long-polling za pomocą AJAX’owego zapytania (GET) puszczanego do skryptu PHP (wykorzystując jQuery.ajax()). PubSub i PEP nie znałam, na pewno sprawdzę te rozwiązania.