Bisakah saya menambahkan penetapan ke "soket utama" setelah koneksi dibuat?

Seperti yang dijelaskan oleh postingan ini, ketika klien pertama kali terhubung dengan server, "soket/proses utama" dibuat dan menampung penetapannya. Kemudian, ketika klien bergabung dengan saluran/topik tertentu, setiap soket/proses saluran menyalin tugas tersebut dan dapat menambahkannya sesuai keinginan.

Saya sekarang memiliki kasus penggunaan di mana, setelah pengguna bergabung dengan saluran masing-masing (i.e. user:#{user_id}), saya mengambil beberapa informasi tentang pengguna dari DB, yang kemudian akan tersedia secara global untuk semua saluran yang kemudian diikuti pengguna ini. Namun saya belum dapat menemukan cara untuk memasukkan informasi tersebut ke socket.assigns sehingga dapat tersedia di mana saja. Jika saya mencoba menetapkannya, mereka hanya akan tersedia di socket.assigns saluran user:#{user_id} khusus ini.

Apakah ada cara untuk melakukannya? Haruskah saya mencoba mengambil semua informasi tersebut sekaligus saat pengguna pertama kali terhubung, alih-alih saat mereka bergabung dengan saluran pengguna individual?


person xji    schedule 31.12.2018    source sumber


Jawaban (1)


Saluran yang berbeda berarti soket yang berbeda.

Solusi termudah adalah mempertahankan status permanen (Agent, ETS, DETS, mnesia, ...), memegang peta user_id => user_info dan menanyakan status ini kapan pun Anda memerlukan info ini.

person Aleksei Matiushkin    schedule 31.12.2018