Websocket informowanie o nowej wiadomości

0

Witam.

Mam projekt w springu. Jest możliwość wysłania wiadomości do wybranego użytkownika za pomocą websocket. Chcę zrobić informowanie użytkownika o tym, że dostał nową wiadomość (tak jak jest np na facebook - pojawia się liczba na ikonce czatu).

Mam zrobione, że liczba wiadomości na ikonce zwiększa się o jeden jeżeli użytkownik dostanie nową wiadomość, ale zastanawiam się jak pobierać ilość nowych wiadomości na start po zalogowaniu.

Mój pomysł: Przy każdym refresh strony otwieram nowe połączenie websocket i zaraz po otwarciu połączenia mogę za pomocą websocketa odpytać sewer o ilość nowych wiadomości (pobierane z bazy)
Tylko w takim przypadku przy każdy przeładowaniu strony to jest dodatkowe odpytanie serwera (za pomocą websocket) o ilość nowych wiadomości. Za to mam pewność, że ilość nowych wiadomości jest zgodna z prawdą.

Myślałem też żeby pobrać przy logowaniu raz i trzymać w cookies, a przy każdej informacji o nowej wiadomości z websocket bym zwiększał w sesji wartość o 1. Tutaj jednak jest minus w przypadku gdy podczas reload strony ktoś wyśle wiadomość, a że websocket nie będzie jeszcze połączony to informacja o wiadomości przepadnie.

Czy jest lepsze rozwiązanie tego problemu niż pobieranie listy po każdym otwarciu połączenia websocket

1

Jeśli masz sesję po stronie serwera to w zasadzie tego się nie da zrobić do końca dobrze.
Generalnie możesz z przeglądarki wysyłać timestamp/ ID ostatnio poznanej wiadomości. Serwer wtedy wie co widział użyszkodnik i sobie wyliczy ile jest nowych wiadomości.
Ostatnie ID/ timestamp sobie w przegladarce zapiszesz.
Jeśli już nie robisz Single Page Application - to możesz to w przeglądarkowym local lub session store zapisać.

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