Kom i gang med Pusher Klienthendelser

I denne serien har vi lært om kanaler fra Pusher, en plattform som lar deg gi brukerne den sømløse sanntidsopplevelsen de vil ha. 

Gjennom hele denne serien har vi strengt sett sett på serverhendelser - hendelser som kommer fra serveren - men vi har også muligheten til å utløse hendelser fra klienten. Disse kalles klienthendelser, og de gir en annen tjeneste enn serverhendelser fordi noen handlinger kanskje ikke trenger validering eller utholdenhet.


 

Klienthendelser har flere restriksjoner som søknaden din må overholde for å kunne bruke dem. De mest bemerkelsesverdige er:

  • Klienthendelser må være aktivert via Dashboard-programmets kanaler.
  • Klienthendelser kan bare utstedes på private og tilstedeværelseskanaler.
  • De leveres ikke til klienten som starter hendelsen.
  • De er begrenset til ikke mer enn ti meldinger per sekund per klient.

Utløsende klienthendelser

Vi ser på et eksempel på klienthendelser ved å legge til en lenke til vår private chat-app som sender en alarm til alle de tilkoblede klientene. Klienthendelser utløses fra objektet returnert av Pusher-bibliotekets abonnere() metode. Vi bruker denne metoden inne i ChannelsChat Vue.js komponent med følgende kode:

la kanal = pusher.subscribe ('private chat');

Utløsing av en klienthendelse ligner veldig på å utløse en serverhendelse. Du bruker channel.trigger () å starte hendelsen og sende hendelsesnavnet og hendelsesdataene til den, slik:

channel.trigger ('klient-send-alarm', melding: 'Alarm!');

Klienthendelse navn må begynne med klient-, som vist i denne koden. Resten av navnet er helt opp til deg. Hendelsesdataene er ikke noe mer enn et vanlig JavaScript-objekt som inneholder egenskapene (og deres verdier) du vil sende med hendelsen.

Endre Chat-applikasjonen

Chatprogrammet er kanal objektet ligger inne i ChannelsChat Vue.js-komponent-det er her vi lager objektet og setter lytteren til sende melding begivenhet. Vi kan omstrukturere denne komponenten slik at den gir en mekanisme for å utløse klienthendelser.

Det første vi må gjøre er å lagre vår kanal objekt som forekomstdata slik at vi kan referere det gjennom hele komponenten. Vi gjør dette ved å legge til en kanal eiendom til vår komponent, slik:

data () return messages: [], channel: null

Da endrer vi laget () krok slik at vi lagrer vår kanal objekt i det nye kanal eiendom i stedet for kanal variabel.

// let channel = pusher.subscribe ('private chat'); // gammel kode this.channel = pusher.subscribe ('private chat');

Bare husk at denne endringen krever at vi prefikser tidligere bruk av kanal med dette.

Utløser en klienthendelse

La oss nå legge til en metode som vil utløse en klienthendelse. La oss kalle det avtrekker(), og koden vil se ut som følgende:

metoder: trigger (eventnavn, melding) this.channel.trigger (eventName, message); 

Den aksepterer hendelsesnavnet og meldingen som skal inkluderes i arrangementet og overfører dataene til this.channel.trigger (), dermed utløser klient hendelsen.

Brukeren samhandler primært med MessageSend komponent fordi den inneholder brukergrensesnittet for å skrive inn og sende meldinger. Så vi skal passere avtrekker() metode som en prop til MessageSend, som dette:

Lytte til klienthendelsen

Det siste vi må gjøre i denne komponenten, er å lytte etter klient-send-alarm begivenhet. Lytting for klienthendelser er nesten identisk med å lytte etter serverhendelser. Den eneste forskjellen er dataene vi sender til binde() metode. Legg til følgende som siste linje i laget () krok:

this.channel.bind ('client-send-alarm', (data) => varsling (data.message));

For denne hendelsen skyver vi ikke den angitte meldingen til chat-skjermen. I stedet viser vi bare den angitte meldingen i en advarselsboks.

Ledninger opp i brukergrensesnittet 

I MessageSend komponent, la oss først legge til utløserproppen til komponenten.

rekvisitter: ['trigger']

La oss da legge til den nye alarmlenken etter Sende knapp.

Alarm!

Lenkens klikk hendelsen er bundet til sendAlarm () metode, som vi legger til komponentens fremgangsmåter erklæring. Her er denne metoden veldig enkel kode:

metoder: // sendMessage () her sendAlarm () this.trigger ('klient-send-alarm', 'Alarm!'); 

De sendAlarm () metoden ringer ganske enkelt avtrekker(), passering klient-send-alarm som navnet på hendelsen og Alarm! som meldingen.

Teste endringene

For å se resultatene av våre kodendringer, må du ha to klienter knyttet til chat-appen. Selv om det kan synes å være åpenbart, er det en veldig god grunn til å ha to klienter åpne: klienten som starter hendelsen, mottar ikke hendelsen.

Så, med to klienter åpne, klikk på Alarm! lenke i en klient, og du vil se hendelsen håndtert i den andre klienten, som vist her:

Klienten til venstre utløste hendelsen, og du kan se den håndtert i klienten til høyre.

Konklusjon

Det sier seg selv at de fleste hendelser som brukes i kanaler-drevne applikasjoner, er serverhendelser, men det er noen tilfeller der du kanskje vil starte en hendelse som ikke trenger server-side validering eller utholdenhet. Med kanaler fra Pusher er det utrolig enkelt å utløse og lytte etter klienthendelser!