Realtidsfunktioner med Phoenix Channels
Tilføj tovejskommunikation i realtid til din Phoenix-app ved hjælp af Channels over WebSockets.
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: falseDefinition 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
endEmner 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
endHå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}
endUdsendelse 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}
endAfsendelse 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- oghandle_in-hændelser broadcast!sender til mange modtagere, menspush/replymålretter én klient- Tilstedeværelse sporer onlinebrugere oven på Channels
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
- Opsætning og struktur af Phoenix-projekter
- Routing, controllere og Plugs
- Views, templates og grundlæggende LiveView
- Realtidsfunktioner med Phoenix Channels