Websocket + REST API – jak synchronizować dane u klienta?

Websocket + REST API – jak synchronizować dane u klienta?
SW
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:250
0

Piszę aplikację, w której dane przesyłane będą do klienta za pomocą websocketów i REST API, tzn. po zalogowaniu apka uruchamia socket odbierający z serwera komunikaty podzielone według ID kanału, a potem wysyła GET po ostatnie kanały wraz z komunikatami.

Mam jednak zagwozdkę jeśli chodzi o start aplikacji. Jak zsynchronizować oba źródła?

Przyszło mi do głowy, żeby buforować komunikaty z socketa do czasu odpowiedzi z API, a potem scalić je z danymi z API. Czy to dobre rozwiązanie, czy może niepotrzebnie komplikuję i jest jakiś prostszy sposób?

Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Jak zsynchronizować oba źródła?

Co to znaczy zsynchronizować?
Co miałoby się synchronizować / buforować?


Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1881
2

Na szybko - możesz np przesortować po jakiejś dacie i scalić oba zbiory danych na kliencie


”Engineering is easy. People are hard.” Bill Coughran
SW
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:250
0
Patryk27 napisał(a):

Jak zsynchronizować oba źródła?

Co to znaczy zsynchronizować?
Co miałoby się synchronizować / buforować?

Założenie jest takie, że użytkownik po zalogowaniu zaczynać odbierać socketem z serwera aktualne komunikaty (JSON). W międzyczasie otrzymuje historię z API (lista JSON-ów) Chciałbym, aby po tym, jak użytkownik dostanie już historię z API, przedstawić mu spójną listę.

AK
Dla mnie tez to jest zupełnie niejasne. Moze realny scenariusz?
Patryk27
Moderator
  • Rejestracja:prawie 18 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
1

Czyli coś w stylu: logujesz się na czat i "na start" widzisz poprzednie 10 wiadomości (które zostały napisane zanim zdążyłeś się jeszcze pojawić), tak?


edytowany 2x, ostatnio: Patryk27
SW
  • Rejestracja:około 5 lat
  • Ostatnio:5 miesięcy
  • Postów:250
0

Faktycznie, na początku chyba niejasno się wyraziłem :) Może być przykład czatu. Loguję się i zaczynam dostawać wiadomości z serwera przez socket. Pobieram też historię, te 10 ostatnich. Historia może (ale nie musi) zawierać część wiadomości, które już otrzymałem socketem. Po otrzymaniu historii chciałbym mieć scaloną listę wiadomości, która potem będzie aktualizowana wiadomościami z socketa.
Zrobiłem tak jak pisał Charles_Ray, sortuję po dacie dane z socketa i łączę z historią.

mr_jaro
  • Rejestracja:prawie 14 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Grudziądz/Bydgoszcz
  • Postów:5300
1

tak jak napisałeś, zbierasz sobie dane w buforze do czasu nie odebrania danych i potem to sychronizujesz sobie, po id najłatwiej sobie te 2 tablice połączyć :) Pamiętaj, że ten proces musisz przeprowadzić też przy chwilowym rozłączeniu, warto też robić refresh po jakimś czasie bo zawsze mogą jakieś dane nie dojść przez ws, o błędy w tej transmisji łatwo.


It's All About the Game.
edytowany 1x, ostatnio: mr_jaro

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.