WebSockets ja reaaliaikaiset järjestelmät Springillä · Oppitunti

Kirjoitusilmaisimet ja paikallaolo

Opitte lisäämään chat-sovellukseen reaaliaikaiset kirjoitusilmaisimet ja paikallaolon STOMP-tapahtumilla, heartbeat-viesteillä ja Springin presence-seurannalla.

Oppitunti 4/413 vaihetta

Kirjoitusilmaisimet ja paikallaolo on ilmainen WebSockets ja reaaliaikaiset järjestelmät Springillä-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 WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Viestien tuolla puolen

Hyvät chat-sovellukset tekevät muutakin kuin välittävät viestejä. Kirjoitusilmaisimet ja online-tila saavat keskustelut tuntumaan reaaliaikaisilta ja reagoivilta.

Tässä oppitunnissa lisätään molemmat ominaisuudet olemassa olevan STOMP-chatin päälle.

Mitä online-tila tarkoittaa?

Online-tila kertoo käyttäjille, kuka on parhaillaan online-tilassa, poissa tai offline-tilassa. Tila päivittyy reaaliajassa käyttäjien yhdistäessä ja katkaistessa yhteyden, mikä antaa sosiaalisen vihjeen henkilön saatavuudesta keskusteluun.

Yhteyksien seuranta

Spring julkaisee tapahtumat SessionConnectedEvent ja SessionDisconnectEvent. Kuuntele niitä ylläpitääksesi reaaliaikaista joukkoa online-tilassa olevista käyttäjistä.

@EventListener
public void onConnect(SessionConnectedEvent event) {
    String user = userFrom(event);
    onlineUsers.add(user);
    broadcastPresence(user, 'ONLINE');
}

Yhteyksien katkeamisen käsittely

Kun käyttäjän yhteys katkeaa, poista hänet ja ilmoita asiasta muille, jotta online-tilan luettelo pysyy ajan tasalla.

@EventListener
public void onDisconnect(SessionDisconnectEvent event) {
    String user = userFrom(event);
    onlineUsers.remove(user);
    broadcastPresence(user, 'OFFLINE');
}

Online-tilan lähettäminen

Lähetä online-tilan päivitykset jaettuun aiheeseen, jotta jokainen yhdistetty asiakas voi päivittää käyttöliittymänsä.

private void broadcastPresence(String user, String status) {
    Map<String, String> event = new HashMap<>();
    event.put('user', user);
    event.put('status', status);
    messagingTemplate.convertAndSend('/topic/presence', event);
}

Kirjoitustapahtuman malli

Kirjoitusilmaisimet ovat kevyitä tapahtumia, eivät tallennettuja viestejä. Määritä pieni hyötykuorma, joka sisältää lähettäjän, huoneen sekä tiedon siitä, aloittiko vai lopettiko lähettäjä kirjoittamisen.

{
  "type": "TYPING",
  "room": "general",
  "sender": "alice",
  "typing": true
}

Kirjoitustapahtumien vastaanottaminen

Määritä kirjoitustapahtumille kohde ja välitä ne huoneen aiheeseen tallentamatta niitä.

@MessageMapping('/chat.typing')
public void typing(TypingEvent event) {
    messagingTemplate.convertAndSend(
        '/topic/room.' + event.getRoom() + '.typing', event);
}

Tapahtumien debouncing asiakasohjelmassa

Asiakkaiden ei pidä lähettää kirjoitustapahtumaa jokaisesta näppäinpainalluksesta. Käytä debouncingia: lähetä 'typing' kerran ja sen jälkeen 'stopped', kun käyttäjä on ollut hetken toimettomana. Tämä vähentää liikennettä huomattavasti.

let timer = null;
function onKeyPress() {
  sendTyping(true);
  clearTimeout(timer);
  timer = setTimeout(function () { sendTyping(false); }, 2000);
}

Sydänäänet vanhentuneille istunnoille

Verkkoyhteyden katkeaminen ei aina aiheuta yhteyden katkeamisen tapahtumaa. Käytä STOMP-sydänääniä, jotta palvelin voi tunnistaa kuolleet yhteydet ja merkitä kyseiset käyttäjät offline-tilaan, jolloin online-tila pysyy ajan tasalla.

Online-tilan skaalaaminen

Kun palvelininstansseja on useita, online-tila on jaettava niiden kesken. Tallenna online-käyttäjät keskitettyyn tietovarastoon, kuten Redisiin, ja lähetä muutokset instanssien välillä, jotta jokainen asiakas näkee yhdenmukaisen online-tilan luettelon.

Tietosuojaa koskevat näkökohdat

Online-tila ja kirjoittaminen paljastavat käyttäjän toimintaa. Anna käyttäjien hallita näkyvyyttään ja jaa online-tila vain niille, joiden kuuluu nähdä se (esimerkiksi yhteyshenkilöille tai saman huoneen jäsenille), ei kaikille palvelimen käyttäjille.

Pikatarkistus

Testaa, miten hyvin ymmärrät online-tilan ja kirjoitusilmaisimet.

Kertaus

Opit lisäämään online-tilan Springin istunnon yhdistämis- ja katkaisutapahtumien avulla sekä toteuttamaan kirjoitusilmaisimet kevyinä, tallentamattomina STOMP-tapahtumina. Debouncing, sydänäänet, skaalauksessa käytettävä jaettu tietovarasto ja tietosuoja-asetukset tekevät näistä ominaisuuksista tuotantokelpoisia.

Aloita maksutta

Opi WebSockets ja reaaliaikaiset järjestelmät Springillä 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 ”Kirjoitusilmaisimet ja paikallaolo” ilmainen?

Kyllä – oppitunnin ”Kirjoitusilmaisimet ja paikallaolo” 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 WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssin, päivitä CoddyKit PROhon. WebSockets ja reaaliaikaiset järjestelmät Springillä-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Kirjoitusilmaisimet ja paikallaolo”?

Opitte lisäämään chat-sovellukseen reaaliaikaiset kirjoitusilmaisimet ja paikallaolon STOMP-tapahtumilla, heartbeat-viesteillä ja Springin presence-seurannalla. Harjoittelet WebSockets ja reaaliaikaiset järjestelmät Springillä-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni WebSockets ja reaaliaikaiset järjestelmät Springillä-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin WebSockets ja reaaliaikaiset järjestelmät Springillä-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”Kirjoitusilmaisimet ja paikallaolo”-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ä WebSockets ja reaaliaikaiset järjestelmät Springillä-oppitunnilla?

Kyllä. Jokainen WebSockets ja reaaliaikaiset järjestelmät Springillä-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. Chat-viestimallin suunnittelu
  2. Julkisten chat-huoneiden toteuttaminen
  3. Yksityisviestintä STOMP:lla
  4. Kirjoitusilmaisimet ja paikallaolo
← Takaisin: WebSockets ja reaaliaikaiset järjestelmät Springillä