Elixir og Phoenix: Skalerbar backendutvikling · leksjon

Sanntidsfunksjoner med Phoenix Channels

Legg til toveis sanntidskommunikasjon i Phoenix-appen Deres ved å bruke Channels over WebSockets.

Leksjon 4 av 413 trinn

Sanntidsfunksjoner med Phoenix Channels er en gratis leksjon i Elixir og Phoenix: Skalerbar backendutvikling på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Elixir og Phoenix: Skalerbar backendutvikling, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Elixir og Phoenix: Skalerbar backendutvikling inneholder totalt 4 leksjoner.

Hva er Channels?

Phoenix Channels tilbyr et sanntidslag for toveis meldingsutveksling over WebSockets (med reservemekanismer). Det passer perfekt for chat, varsler og live-dashbord.

Socket-laget

Klienter kobler til en Socket, som autentiserer tilkoblingen og ruter til emner. Den defineres i endepunktet Deres.

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

Definere en UserSocket

Socket-modulen angir hvilke kanaler som håndterer hvilke emnemønstre, og hvordan connect skal fungere.

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 topic er en streng, for eksempel room:lobby. Klienter blir med i et emne for å sende og motta meldinger som er avgrenset til dette emnet.

Opprette en Channel

En kanalmodul håndterer join og innkommende hendelser med handle_in.

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

Håndtere innkommende meldinger

handle_in/3 reagerer på hendelser som klienter sender. Returner :noreply, eller svar avsenderen.

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

Sende kringkasting til et emne

broadcast!/3 sender en melding til ALLE abonnenter av emnet og muliggjør sanntidsdistribusjon til flere mottakere.

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

Svare avsenderen

Returner {:reply, {:ok, payload}, socket} for å svare bare klienten som sendte hendelsen.

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

Sende fra serveren

Bruk push/3 for å sende en melding til én tilkoblet klient, for eksempel etter at asynkront arbeid er fullført.

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

JavaScript-klienten

I frontend kobler Phoenix JS-klienten seg til, blir med i et emne og lytter etter hendelser.

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

Sporing av tilstedeværelse

Phoenix.Presence bygger på Channels for å spore hvem som er tilkoblet i klyngen, og synkroniserer automatisk hendelser når brukere blir med eller forlater den.

Kort kontroll

Test kunnskapene Deres om Channels.

Oppsummering

De la til sanntidsfunksjoner med Channels:

  • Klienter kobler til en Socket og blir med i topics
  • Channels håndterer join- og handle_in-hendelser
  • broadcast! distribuerer til flere mottakere, mens push/reply retter seg mot én klient
  • Presence sporer tilkoblede brukere oppå Channels
Gratis å komme i gang

Lær deg Elixir med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
12
Leksjoner
48

Ofte stilte spørsmål

Er leksjonen «Sanntidsfunksjoner med Phoenix Channels» gratis?

Ja – hele teksten i «Sanntidsfunksjoner med Phoenix Channels» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Elixir og Phoenix: Skalerbar backendutvikling-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Elixir og Phoenix: Skalerbar backendutvikling inneholder totalt 4 leksjoner.

Hva lærer jeg i «Sanntidsfunksjoner med Phoenix Channels»?

Legg til toveis sanntidskommunikasjon i Phoenix-appen Deres ved å bruke Channels over WebSockets. Du øver på Elixir og Phoenix: Skalerbar backendutvikling med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Elixir og Phoenix: Skalerbar backendutvikling?

Ingen tidligere erfaring er nødvendig. Elixir og Phoenix: Skalerbar backendutvikling på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.

Hvor lang tid tar leksjonen «Sanntidsfunksjoner med Phoenix Channels»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Elixir og Phoenix: Skalerbar backendutvikling-leksjonen?

Ja. Alle Elixir og Phoenix: Skalerbar backendutvikling-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Oppsett og struktur for Phoenix-prosjekter
  2. Ruting, kontrollere og Plugs
  3. Visninger, maler og grunnleggende LiveView
  4. Sanntidsfunksjoner med Phoenix Channels
← Tilbake til Elixir og Phoenix: Skalerbar backendutvikling