Nasłuchiwanie zdarzeń serwera

0

Witam
Czy ktoś może wie jak się robi coś takiego, że przeglądarka nasłuchuje zmian na serwerze? Używa się tego s shoutboxach, wtedy tekst pojawia się u wszystkich zaraz jak użytkownik wyśle go na serwer. Gdzieś o tym czytałam, ale już nie pamiętam tej nazwy. Ktoś pomoże?

0

Long pooling lub WebSockets.

0

websockets są dość "nowe" toteż większość stron zapewne robi pooling ajaxem

0

Dzięki. Rzeczywiście chodziło mi o long pooling. A szerzej to Comet, może komuś się przyda: http://en.wikipedia.org/wiki/Comet_%28programming%29
Niestety, nie pomogło mi to zbytnio. Może dokładniej opiszę problem. Mam na stronie przycisk, który po kliknięciu wysyła zapytanie do serwera do aplikacji X. Aplikacja X generuje dane i wysyła je do aplikacji Y (przez http), która te dane zapisuje w bazie. Teraz chcę pobrać te dane na stronie z aplikacji Y. Musi to się odbyć dopiero po tym, jak zostaną zapisane. Tak więc moja aplikacja Y otrzyma dwa zapytania: jedno z danymi z aplikacji X i drugie ze strony o przesłanie danych. Oba zapytania będą w tej samej sesji http.
Jak to zrobić, żeby te zapytania zsynchronizować, tzn. żeby serwer z aplikacją odpowiedział na zapytanie dopiero, kiedy skończy przetwarzać otrzymane dane. Jest na to jakiś rozsądny sposób?
Dodam jeszcze, że wszystko dzieje się na serwerze jawa.

0

A jaki masz problem? o_O Rozumiem że to aplikacja Y dostaje dane, a potem to aplikacja Y ma je wyświetlić? To niech request o wyświetlenie "wisi" dopóki dane nie zostaną przetworzone. Nie widzę tutaj zupełnie żadnego problemu, ani miejsca na jakieś ajaxa ani nic.

0

No właśnie tak bym chciała zrobić, żeby ten request sobie wisiał. A problem mam taki jak wywołana w serwlecie metoda doGet ma się dowiedzieć, że inny request (ten wywołany z aplikacji X) już się zakończył, żeby dopiero wtedy odpowiedzieć na zapytanie.

0

Najprościej? Niech oba kontrolery mają dostęp do jakiegoś serwisu, który dla zadanego UUID zwraca info czy już jest wykonane czy też nie.

0

Nie rozumiem jak to zrobić, skąd wziąć taki serwis i jakie kontrolery. Może jeszcze prościej powiem: w serwlecie są dwie metody, doGet i doPost. Mogą być wywołane w różnej kolejności, ale metoda doGet ma się zakończyć jako ostatnia niezależnie kiedy się zaczęła. Obie metody są w jednej sesji.
Mogłabym w doGet w pętli sprawdzać, czy jakaś flaga w sesji została ustawiona i wtedy zwracać wynik, ale to jest złe rozwiązanie. Chodzi raczej o coś w stylu konstrukcji join i wait.

0

Myślałem że moze używać jakiegoś normalnego frameworka, a nie ręcznie serwletów...
A jaki masz problem zrobić tutaj wait i notify w takim razie?

0

Problem jest taki, że nie wiem jak to zrobić.. To nie są wątki tworzone i uruchamiane przez mnie. Nie bardzo mam pomysł jak to ogarnąć i żeby te wątki komunikowały się w parach w obrębie sesji.
Przychodzi mi do głowy pomysł, żeby użyć Piped[Input|Outpu]Stream. Nigdy tego nie używałam, ale z opisu wynika, że to może rozwiązać problem.

0

Jeśli chodzi o Comet, to niestety to rozwiązanie zabiło mi stronę na serwerach home. Lokalnie u mnie się świetnie sprawdzało, jednak na serwerze podczas faktycznego działania strony już nie. Robiłem to na ajaxie i php.

0

Próbowałam coś z tym PipedI/OStream, ale bez sukcesów. Teraz zastanawiam się nad BlockingQueue. Według opisu to powinno być właśnie to co potrzebuję. Czy ktoś może kiedyś z tego korzystał i może się podzielić uwagami? Nie chciałabym znowu eksperymentować, żeby się okazało, że tak się nie da.

1 użytkowników online, w tym zalogowanych: 0, gości: 1