Realtidsfunktioner med Phoenix Channels
Lägg till dubbelriktad kommunikation i realtid i din Phoenix-app med Channels över WebSockets.
Realtidsfunktioner med Phoenix Channels är en gratis lektion i Elixir och Phoenix: skalbar backendutveckling på CoddyKit. Detta är lektion 4 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Elixir och Phoenix: skalbar backendutveckling, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Elixir och Phoenix: skalbar backendutveckling innehåller totalt 4 lektioner.
Vad är Channels?
Phoenix Channels tillhandahåller ett realtidslager för dubbelriktad meddelandehantering över WebSockets (med reservlösningar). Det passar perfekt för chatt, aviseringar och instrumentpaneler i realtid.
Socket-lagret
Klienter ansluter till en Socket, som autentiserar anslutningen och dirigerar den till topics. Den definieras i Er endpoint.
socket "/socket", MyAppWeb.UserSocket,
websocket: true,
longpoll: falseDefiniera en UserSocket
Socket-modulen anger vilka kanaler som hanterar vilka topic-mönster och hur connect ska fungera.
defmodule MyAppWeb.UserSocket do
use Phoenix.Socket
channel "room:*", MyAppWeb.RoomChannel
def connect(_params, socket, _info), do: {:ok, socket}
def id(_socket), do: nil
endTopics och prenumerationer
En topic är en sträng som room:lobby. Klienter ansluter till en topic för att skicka och ta emot meddelanden som är avgränsade till den.
Skapa en Channel
En kanalmodul hanterar join och inkommande händelser med handle_in.
defmodule MyAppWeb.RoomChannel do
use MyAppWeb, :channel
def join("room:" <> _id, _params, socket) do
{:ok, socket}
end
endHantera inkommande meddelanden
handle_in/3 reagerar på händelser som klienter skickar. Returnera :noreply eller svara avsändaren.
def handle_in("new_msg", %{"body" => body}, socket) do
broadcast!(socket, "new_msg", %{body: body})
{:noreply, socket}
endSkicka broadcast till en topic
broadcast!/3 skickar ett meddelande till ALLA prenumeranter på topicen, vilket möjliggör utskick i realtid.
broadcast!(socket, "new_msg", %{body: "Hello everyone"})Svara avsändaren
Returnera {:reply, {:ok, payload}, socket} för att svara enbart den klient som skickade händelsen.
def handle_in("ping", _payload, socket) do
{:reply, {:ok, %{pong: true}}, socket}
endSkicka från servern
Använd push/3 för att skicka ett meddelande till en ansluten klient, till exempel när ett asynkront arbete har slutförts.
push(socket, "notification", %{text: "Job finished"})JavaScript-klienten
I frontend ansluter Phoenix JS-klienten, ansluter till en topic och lyssnar efter händelser.
let channel = socket.channel("room:lobby", {})
channel.join()
channel.on("new_msg", payload => console.log(payload.body))Närvarospårning
Phoenix.Presence bygger vidare på Channels för att spåra vilka som är online i klustret och synkroniserar automatiskt händelser när användare ansluter och lämnar.
Snabbkontroll
Testa Era kunskaper om Channels.
Sammanfattning
Ni lade till realtidsfunktioner med Channels:
- Klienter ansluter till en Socket och ansluter till topics
- Channels hanterar händelser med
joinochhandle_in broadcast!skickar till alla, medanpush/replyriktas till en klient- Presence spårar onlineanvändare ovanpå Channels
Lär dig Elixir med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Realtidsfunktioner med Phoenix Channels” gratis?
Ja – hela texten till ”Realtidsfunktioner med Phoenix Channels” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Elixir och Phoenix: skalbar backendutveckling, kan Ni uppgradera till CoddyKit PRO. Kursen i Elixir och Phoenix: skalbar backendutveckling innehåller totalt 4 lektioner.
Vad lär jag mig i ”Realtidsfunktioner med Phoenix Channels”?
Lägg till dubbelriktad kommunikation i realtid i din Phoenix-app med Channels över WebSockets. Ni övar på Elixir och Phoenix: skalbar backendutveckling med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Elixir och Phoenix: skalbar backendutveckling?
Du behöver inga förkunskaper. Utbildningen i Elixir och Phoenix: skalbar backendutveckling på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Realtidsfunktioner med Phoenix Channels”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Elixir och Phoenix: skalbar backendutveckling-lektionen?
Ja. Varje Elixir och Phoenix: skalbar backendutveckling-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Projektuppsättning och struktur i Phoenix
- Routing, controllers och plugs
- Vyer, mallar och grunderna i LiveView
- Realtidsfunktioner med Phoenix Channels