Elixir og Phoenix: Skalerbar backend-udvikling · Lektion

Realtidsfunktioner med Phoenix Channels

Tilføj tovejskommunikation i realtid til din Phoenix-app ved hjælp af Channels over WebSockets.

Lektion 4 af 413 trin

Realtidsfunktioner med Phoenix Channels er en gratis Elixir og Phoenix: Skalerbar backend-udvikling-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Elixir og Phoenix: Skalerbar backend-udvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.

Hvad er kanaler?

Phoenix Channels leverer et realtidsbaseret, tovejs lag til meddelelser over WebSockets (med reserveforbindelser). Det er ideelt til chat, notifikationer og live-dashboardser.

Socket-laget

Klienter opretter forbindelse til en Socket, som godkender forbindelsen og videresender til emner. Den defineres i dit endpoint.

socket "/socket", MyAppWeb.UserSocket,
  websocket: true,
  longpoll: false

Definition af en UserSocket

Socket-modulet angiver, hvilke kanaler der håndterer hvilke emnemønstre, og hvordan der oprettes forbindelse med connect.

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

Emner og abonnementer

Et emne er en streng som room:lobby. Klienter tilslutter sig et emne for at sende og modtage meddelelser, der er begrænset til det.

Oprettelse af en kanal

Et kanalmodul håndterer join og indgående hændelser med handle_in.

defmodule MyAppWeb.RoomChannel do
  use MyAppWeb, :channel
  def join("room:" <> _id, _params, socket) do
    {:ok, socket}
  end
end

Håndtering af indgående meddelelser

handle_in/3 reagerer på hændelser, som klienter sender. Returnér :noreply, eller svar afsenderen.

def handle_in("new_msg", %{"body" => body}, socket) do
  broadcast!(socket, "new_msg", %{body: body})
  {:noreply, socket}
end

Udsendelse til et emne

broadcast!/3 sender en meddelelse til ALLE abonnenter på emnet og muliggør dermed realtidsudsendelse til mange modtagere.

broadcast!(socket, "new_msg", %{body: "Hello everyone"})

Svar til afsenderen

Returnér {:reply, {:ok, payload}, socket} for kun at svare den klient, der sendte hændelsen.

def handle_in("ping", _payload, socket) do
  {:reply, {:ok, %{pong: true}}, socket}
end

Afsendelse fra serveren

Brug push/3 til at sende en meddelelse til én forbundet klient, f.eks. når asynkront arbejde er afsluttet.

push(socket, "notification", %{text: "Job finished"})

JavaScript-klienten

På frontend opretter Phoenix JS-klienten forbindelse, tilslutter sig et emne og lytter efter hændelser.

let channel = socket.channel("room:lobby", {})
channel.join()
channel.on("new_msg", payload => console.log(payload.body))

Sporing af tilstedeværelse

Phoenix.Presence bygger oven på Channels og sporer, hvem der er online i hele klyngen, mens hændelser for tilslutning og frakobling automatisk synkroniseres.

Hurtigt tjek

Test din viden om Channels.

Opsummering

Du tilføjede realtidsfunktioner med Channels:

  • Klienter opretter forbindelse til en Socket og tilslutter sig emner
  • Kanaler håndterer join- og handle_in-hændelser
  • broadcast! sender til mange modtagere, mens push/reply målretter én klient
  • Tilstedeværelse sporer onlinebrugere oven på Channels
Gratis at komme i gang

Lær Elixir med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
12
Lektioner
48

Ofte stillede spørgsmål

Er lektionen “Realtidsfunktioner med Phoenix Channels” gratis?

Ja — hele teksten til “Realtidsfunktioner med Phoenix Channels” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Elixir og Phoenix: Skalerbar backend-udvikling-kurset, skal du opgradere til CoddyKit PRO. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Realtidsfunktioner med Phoenix Channels”?

Tilføj tovejskommunikation i realtid til din Phoenix-app ved hjælp af Channels over WebSockets. Du øver dig i Elixir og Phoenix: Skalerbar backend-udvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Elixir og Phoenix: Skalerbar backend-udvikling?

Der kræves ingen tidligere erfaring. Elixir og Phoenix: Skalerbar backend-udvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.

Hvor lang tid tager lektionen “Realtidsfunktioner med Phoenix Channels”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Elixir og Phoenix: Skalerbar backend-udvikling-lektion?

Ja. Alle Elixir og Phoenix: Skalerbar backend-udvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Opsætning og struktur af Phoenix-projekter
  2. Routing, controllere og Plugs
  3. Views, templates og grundlæggende LiveView
  4. Realtidsfunktioner med Phoenix Channels
← Tilbage til Elixir og Phoenix: Skalerbar backend-udvikling