PubSub & Broadcast
Penjelasan
Phoenix.PubSub adalah sistem publish-subscribe bawaan Phoenix yang memungkinkan proses mana pun mengirim pesan ke banyak subscriber sekaligus lewat konsep topic, tanpa proses pengirim perlu tahu siapa saja penerimanya. Sebuah proses (misalnya LiveView) berlangganan topic dengan Phoenix.PubSub.subscribe/2, lalu proses lain bisa mengirim pesan ke topic yang sama dengan Phoenix.PubSub.broadcast/3. Pola ini sangat berguna untuk fitur real-time seperti notifikasi baru, update stok produk, atau chat, karena semua LiveView yang subscribe ke topic yang sama akan menerima pesan dan bisa memperbarui assigns mereka lewat callback handle_info/2, sehingga UI ter-update otomatis di semua browser yang terhubung.
Contoh Konsep
defmodule TokoAppWeb.StokLive do
use TokoAppWeb, :live_view
def mount(_params, _session, socket) do
if connected?(socket) do
Phoenix.PubSub.subscribe(TokoApp.PubSub, "stok:update")
end
{:ok, assign(socket, stok: 100)}
end
def handle_info({:stok_berubah, jumlah_baru}, socket) do
{:noreply, assign(socket, stok: jumlah_baru)}
end
end
# Di tempat lain, misal setelah checkout:
Phoenix.PubSub.broadcast(TokoApp.PubSub, "stok:update", {:stok_berubah, 95})
Praktikum
Tambahkan subscribe ke topic komentar:baru saat mount, dan handle_info yang menambahkan komentar baru ke assign daftar_komentar.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Selalu bungkus Phoenix.PubSub.subscribe dengan pengecekan connected?(socket) di mount/3, karena mount dijalankan dua kali (render statis lalu WebSocket) dan subscribe ganda akan menyebabkan pesan diterima dua kali.