Study
Phoenix

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.

Editor Latihan

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.