Elixir ja Phoenix: skaalautuva backend-kehitys · Oppitunti

Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla

Lisää Phoenix-sovellukseesi kaksisuuntainen reaaliaikainen viestintä käyttämällä WebSocketien päällä toimivia Channels-kanavia.

Oppitunti 4/413 vaihetta

Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla on ilmainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä kanavat ovat?

Phoenixin Channels tarjoaa WebSocketien (varajärjestelyineen) päälle reaaliaikaisen kaksisuuntaisen viestintäkerroksen. Se sopii erinomaisesti chateihin, ilmoituksiin ja reaaliaikaisiin koontinäyttöihin.

Socket-kerros

Asiakkaat muodostavat yhteyden Socket-yhteyteen, joka todentaa yhteyden ja reitittää sen aiheisiin. Se määritellään endpointissa.

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

UserSocketin määrittäminen

Socket-moduuli määrittää, mitkä kanavat käsittelevät mitäkin aihekuvioita ja miten connect toimii.

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

Aiheet ja tilaukset

topic on merkkijono, kuten room:lobby. Asiakkaat liittyvät aiheeseen lähettääkseen ja vastaanottaakseen siihen rajattuja viestejä.

Kanavan luominen

Kanavamoduuli käsittelee join-kutsun ja saapuvat tapahtumat handle_in-funktion avulla.

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

Saapuvien viestien käsittely

handle_in/3 reagoi asiakkaiden lähettämiin tapahtumiin. Palauttakaa :noreply tai vastatkaa lähettäjälle.

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

Lähettäminen aiheeseen

broadcast!/3 lähettää viestin jokaiselle aiheen tilaajalle, mikä mahdollistaa reaaliaikaisen jakelun.

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

Vastaaminen lähettäjälle

Palauttakaa {:reply, {:ok, payload}, socket}, jos haluatte vastata vain tapahtuman lähettäneelle asiakkaalle.

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

Lähettäminen palvelimelta

Lähettäkää viesti yhdelle yhteydessä olevalle asiakkaalle push/3-funktion avulla, esimerkiksi asynkronisen työn valmistuttua.

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

JavaScript-asiakas

Selainpuolella Phoenixin JS-asiakas muodostaa yhteyden, liittyy aiheeseen ja kuuntelee tapahtumia.

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

Presence-seuranta

Phoenix.Presence rakentuu Channelsin päälle ja seuraa, ketkä ovat verkossa klusterin eri osissa. Se synkronoi liittymis- ja poistumistapahtumat automaattisesti.

Pikatarkistus

Testatkaa Channels-tietonne.

Kertaus

Lisäsitte sovellukseen reaaliaikaisia ominaisuuksia Channelsin avulla:

  • Asiakkaat muodostavat yhteyden Socketiin ja liittyvät aiheisiin
  • Kanavat käsittelevät join- ja handle_in-tapahtumia
  • broadcast! lähettää viestin kaikille, kun taas push/reply kohdistuu yhteen asiakkaaseen
  • Presence seuraa verkossa olevia käyttäjiä Channelsin päällä
Aloita maksutta

Opi Elixir tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla” ilmainen?

Kyllä – oppitunnin ”Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Elixir ja Phoenix: skaalautuva backend-kehitys-kurssin, päivitä CoddyKit PROhon. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla”?

Lisää Phoenix-sovellukseesi kaksisuuntainen reaaliaikainen viestintä käyttämällä WebSocketien päällä toimivia Channels-kanavia. Harjoittelet Elixir ja Phoenix: skaalautuva backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Elixir ja Phoenix: skaalautuva backend-kehitys-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunnilla?

Kyllä. Jokainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Phoenix-projektin määritys ja rakenne
  2. Reititys, ohjaimet ja Plugs
  3. Näkymät, mallineet ja LiveView-perusteet
  4. Reaaliaikaiset ominaisuudet Phoenix Channels -kanavilla
← Takaisin: Elixir ja Phoenix: skaalautuva backend-kehitys