Elixir och Phoenix: skalbar backendutveckling · Lektion

Realtidsfunktioner med Phoenix Channels

Lägg till dubbelriktad kommunikation i realtid i din Phoenix-app med Channels över WebSockets.

Lektion 4 av 413 steg

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: false

Definiera 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
end

Topics 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
end

Hantera 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}
end

Skicka 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}
end

Skicka 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 join och handle_in
  • broadcast! skickar till alla, medan push/reply riktas till en klient
  • Presence spårar onlineanvändare ovanpå Channels
Gratis att börja

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

  1. Projektuppsättning och struktur i Phoenix
  2. Routing, controllers och plugs
  3. Vyer, mallar och grunderna i LiveView
  4. Realtidsfunktioner med Phoenix Channels
← Tillbaka till Elixir och Phoenix: skalbar backendutveckling