ActionCable - kilka pytań

Cześć,

mam kilka pytań odnośnie ActionCable:

  • we wszystkich materiałach, które znalazłem zawsze przesyłany jest jeden obiekt (np. zadanie z todolisty, głos w głosowaniu, itp.), który jest następnie ‘doklejany’ za pomocą javascriptu i zawsze na początku jest stan ‘zerowy’ (brak zadań, głosów, rozmów) . To ma sens w wypadku budowania danego zbioru od zera, ale nie sprawdza się w momencie np. otworzenia listy z 3 zadaniami. W związku z tym pytanie - jak najlepiej to rozwiązać? Na chwilę obecną wpadłem na to, że pierwsze otworzenie strony jest generowane przez widok (@items.each itp.), tworzona jest subskrypcja i za pomocą websocketów jest wysyłana tablica z nazwami danych zadań. Takie rozwiązanie działa, nie ma też problemu w usuwaniu i dodawaniu zadań (synchronizuje się wszystko na kilku otwartych kartach przeglądarki), ale każdorazowo jest czyszczony widok na stronie i każdorazowo jest wysyłana cała tablica. Jest może lepsza metoda, aby na początku wysłać websocketami całą tablicę, a potem tylko zmiany?

  • i druga sprawa - jak sobie poradzić z dużą ilością subskrybowanych danych na stronie? Przykładowo sklep internetowy, na którym jest wyświetlane 30 produktów, u każdego produktu jest za pomocą websocketów podawana aktualna ilość na magazynie, cena, średnia ocen, nazwa i opis. Jeżeli każdy z tych 30 produktów będzie przesyłany jako hash zawierający 5 elementów, to przy 10 użytkownikach na stronie zostanie utworzonych 300 połączeń - chyba nie tędy droga. To samo dotyczy przykładowo panelu administracyjnego, z którego korzysta 20-30 osób jednocześnie i na którym jest wyświetlanych 10-15 różnych danych (np. ilość mejli do odpowiedzenia, ilość reklamacji itd itp.). Jak rozwiązać kwestię panelu - jeden kanał z haszem i wszystkimi danymi lub pojedyncze kanały dla każdej danej?

Z góry dziękuję za podpowiedzi lub nakierowanie w odpowiednią stronę :slight_smile:

Nie wiem czy dobrze zrozumiałem, ale masz na stronie jakąś listę obiektów i działasz z nimi na zasadzie jakiegoś ogólnie pojętego CRUD’a i chcesz żeby zmiany były widoczne u innych użytkowników?
Jeśli nie to nie bijcie :stuck_out_tongue:
Co do początkowego ładowania, to moim zdaniem nie ma jakiejś wielkiej różnicy w podejściu wyświetlania normalnym widokiem vs pusty widok i dossanie potem czy to ajaxem czy socketami.
Nie korzystałem konkretnie z action cable, ale zasada działania raczej powinna być taka sama dla websocketów.
Ja do tematu zawsze podchodziłem tak, że wysyłałem sobie typ akcji i id obiektu. Info wysyłam do subskrybentów z poziomu callbacka instancji. Wysyłane są wtedy tylko różnice a klient już wie co z taką informacją zrobić dalej.
NIe wiem czy to co napisałem jest zrozumiałe, bo jeszcze wcześnie :wink:
Co do ilości subskrypcji/kanłów ja zawsze mam jeden kanał per user/session i w zależności od tego co jest istotne dla usera to mu to wysyłam lub nie. Wtedy powinien być jeden kanał dla użytkownika. Nie tworzę oddzielnych kanałów per jeden produkt rekord etc. Jeśli już trzeba to bardziej jakoś rozdzielać dany kanał bym robił per jeden resource.