Kehadiran dan Pembaruan Data Langsung
Tambahkan pelacakan kehadiran ke aplikasi Anda dan kelola pembaruan data langsung untuk antarmuka pengguna yang dinamis.
Kehadiran dan Pembaruan Data Langsung adalah pelajaran Elixir & Phoenix: Scalable Backend Development gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Elixir & Phoenix: Scalable Backend Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
What is User Presence?
In real-time applications, presence refers to tracking who is currently online, active, or viewing a specific resource.
- Think of a chat application showing 'online' status.
- Or a collaborative document editor indicating who else is viewing or editing.
- It's crucial for dynamic, interactive user interfaces.
Phoenix.Presence Explained
Phoenix Framework provides a powerful, built-in module called Phoenix.Presence to manage presence information.
- It leverages Elixir's concurrency and distribution features.
- It automatically handles users joining, leaving, and even network disconnections.
- This makes building robust presence features much simpler.
Integrating Presence in Channels
To use Phoenix.Presence, you typically integrate it into your Phoenix Channel modules.
First, ensure your UserSocket defines a pubsub_server (e.g., MyApp.PubSub). Then, within your channel module, you add use Phoenix.Presence.
This mixin provides helpers for tracking and retrieving presence data.
Tracking Users with `track/3`
The core function for adding a user to presence is Phoenix.Presence.track/3.
- It takes the socket, a unique key (e.g., user ID), and metadata (e.g., username, status).
- You usually call this in your channel's
join/3callback. - When a user joins a channel, they are tracked; when they leave, their presence is automatically removed.
Example: Basic Presence Track
Let's see how track/3 is called when a user joins a channel. We'll simulate a socket for this example.
defmodule MyRoomChannel do
use Phoenix.Channel
use Phoenix.Presence
@impl true
def join("room:lobby", _payload, socket) do
# In a real app, user_id would come from auth
user_id = "user_#{System.unique_integer([:positive])}"
metadata = %{username: "Guest_#{user_id}", status: "online"}
# Track the user's presence for this topic
Phoenix.Presence.track(socket, user_id, metadata)
IO.puts "User #{user_id} joined and tracked in room:lobby"
{:ok, socket}
end
# Minimal run_example to simulate join
def run_example do
mock_socket = %{topic: "room:lobby", assigns: %{}}
join("room:lobby", %{}, mock_socket)
end
end
MyRoomChannel.run_example()Accessing Presence Information
Once users are tracked, you can retrieve their presence information:
Phoenix.Presence.list(socket): Returns a map of all presences for the channel's topic.Phoenix.Presence.get_by_key(socket, user_key): Retrieves presence data for a specific user key.
These functions allow you to build dynamic UI elements based on who is online.
Live Data Updates Concept
Beyond just knowing who is online, real-time apps often need to push live data updates to clients.
- This could be a new chat message, a score update in a game, or a change in a shared item's status.
- The key is to send structured data to all connected clients on a specific channel topic.
- Clients then receive this data and update their UI accordingly.
Broadcasting Data with `broadcast!`
You can send live data updates using the broadcast!/3 function (or push/3 for direct messages) from your channel or another process.
broadcast!(socket, "event_name", %{data: "payload"}): Sends an event and payload to all clients subscribed to thesocket's topic.- The
"event_name"helps clients differentiate between types of updates.
This is how you keep all connected clients in sync with server-side changes.
Example: Broadcasting Live Data
Here's how you might broadcast a new message to all clients in a room. We simulate the broadcast call.
defmodule MyDataUpdater do
# We use Phoenix.Channel for its broadcast! helper
use Phoenix.Channel
# Function to simulate sending an update
def send_new_message(topic, sender, text) do
event = "new_message"
payload = %{sender: sender, text: text, timestamp: System.system_time(:second)}
# In a real app, you'd call broadcast! from a channel context
# or use Phoenix.PubSub.broadcast from a GenServer.
# For this runnable example, we'll just demonstrate the payload.
IO.puts "Simulating broadcast to '#{topic}' with event '#{event}' and payload:"
IO.inspect payload
:ok
end
# To run this example
def run_example do
send_new_message("room:lobby", "Alice", "Hello everyone!")
end
end
MyDataUpdater.run_example()Presence & Updates Check
Which of the following statements about Phoenix.Presence and live data updates are TRUE?
Summary: Presence & Live Data
Great job! You've learned how Phoenix.Presence simplifies tracking user activity in real-time applications.
- We covered using
Phoenix.Presence.track/3to mark users as present. - You also saw how to retrieve presence information with
list/1andget_by_key/2. - Finally, we explored sending dynamic live data updates to clients using
broadcast!/3for interactive UIs.
These tools are fundamental for building engaging real-time features!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Kehadiran dan Pembaruan Data Langsung” gratis?
Ya — teks lengkap “Kehadiran dan Pembaruan Data Langsung” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Elixir & Phoenix: Scalable Backend Development, upgrade ke CoddyKit PRO. Kursus Elixir & Phoenix: Scalable Backend Development mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Kehadiran dan Pembaruan Data Langsung”?
Tambahkan pelacakan kehadiran ke aplikasi Anda dan kelola pembaruan data langsung untuk antarmuka pengguna yang dinamis. Kamu berlatih Elixir & Phoenix: Scalable Backend Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Elixir & Phoenix: Scalable Backend Development?
Tidak diperlukan pengalaman sebelumnya. Elixir & Phoenix: Scalable Backend Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Kehadiran dan Pembaruan Data Langsung” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Elixir & Phoenix: Scalable Backend Development ini?
Ya. Setiap pelajaran Elixir & Phoenix: Scalable Backend Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengantar Phoenix Channels
- Penyiaran dan Pesan Pub/Sub
- Kehadiran dan Pembaruan Data Langsung
- Autentikasi dan Otorisasi Channel