Începeți cu dispozitivul de împingere folosiți canalele de prezență

În această serie, am învățat despre Channels from Pusher, o platformă care vă permite să oferiți utilizatorilor experiența fără probleme în timp real.

Canalele de prezență se bazează pe securitatea furnizată de canalele private, dar adaugă beneficiul știut care sunt utilizatorii care sunt abonați și conectați la acel canal. Cea mai bună parte este cât de ușor este implementarea și utilizarea canalelor de prezență și este chiar mai ușor dacă ați configurat deja aplicația dvs. pentru a utiliza canale private. Veți învăța cum să utilizați canalele de prezență în această postare.

 

O aplicație de chat chiar mai bună

Aplicația noastră de chat utilizează în prezent un canal privat pentru a facilita comunicarea instantanee, client / server. Configurarea aplicației noastre pentru a folosi un canal de prezență va fi extrem de ușoară. Să începem cu aplicația server.

Modificarea serverului

Pentru a utiliza un canal privat, am configurat un punct final pentru a ne asigura că un utilizator este autentificat cu aplicația noastră. Acest punct final execută ChannelsController„s authorizeUser () metoda, și se numește biblioteca lui Pusher socket_auth () pentru a ajuta la autentificarea utilizatorului. Pentru a utiliza un canal de prezență, trebuie să ne schimbăm authorizeUser () pentru a apela biblioteca lui Pusher presence_auth () astfel:

funcția publică authorizeUser (Solicitare $ request) if (! Auth :: check ()) returnează răspunsul nou ("Interzis", 403);  $ presenceData = ['name' => Auth :: user () -> nume]; echo $ this-> pusher-> presence_auth ($ request-> input ('channel_name'), $ request-> input ('socket_id'), Auth :: user () -> id, $ dateData); 

Dar schimbarea numelui metodei este doar prima modificare; trebuie să furnizăm și noi presence_auth () cu identificatorul unic al utilizatorului și cu orice informații suplimentare pe care dorim să le furnizăm despre utilizator. Codul de mai sus stochează aceste date suplimentare în $ presenceData variabilă și o trece ca ultim argument presence_auth ().

În plus, trebuie să modificăm Trimite mesaj() metodă. Prima modificare este numele canalului. Ca și în cazul tuturor celorlalte nume, trebuie să prefixăm numele canalului pentru a indica tipul de canal pe care dorim să îl folosim: prezenţă- în acest caz, așa cum se arată în codul următor.

$ this-> pusher-> trigger ("prezență-chat", "send-message", $ date);

De asemenea, putem modifica datele pe care le trimitem cu evenimentul - în loc să furnizăm numele utilizatorului care a inițiat evenimentul, putem include ID-ul utilizatorului.

$ data ['user'] = Auth :: utilizator () -> id;

Pentru că vom folosi un canal de prezență, putem căuta nume de utilizator de la client și această mică modificare va reduce dimensiunea datelor care trec prin rețea.

Modificarea Clientului

Clientul e canal obiect conține tot ceea ce avem nevoie pentru a lucra cu canalul abonat și interogarea datelor utilizatorului nu este o excepție. Al nostru canal obiectul are o proprietate numită membrii pe care le putem folosi pentru a prelua informațiile specifice unui utilizator. Vom folosi acest obiect în Trimite mesaj gestionarea evenimentului, după cum urmează:

this.channel.bind ('trimite mesaj', (date) => let user = this.channel.members.get (data.user); this.messages.push (message: data.message, user: user .info.name););

Aici sunăm this.channels.members.get () și treceți în ID-ul utilizatorului (rețineți că aplicația noastră de server acum furnizează ID-ul în locul numelui). Această metodă returnează un obiect cu un info proprietate, și asta info obiect conține toate informațiile suplimentare pe care le-am furnizat în $ presenceData variabilă în authorizeUser () pe server. Deci, în codul de mai sus, vom prelua numele utilizatorului cu user.info.name.

Putem, de asemenea, modifica declanșare () metodă pentru a include informațiile despre utilizatorul care a inițiat evenimentul de alarmă client. Pentru a prelua datele de membru ale utilizatorului momentan conectat, utilizați pe mine proprietate, așa cum se arată în următorul cod:

declanșează (eventName, mesaj) this.channel.trigger (eventName, message, user: this.channel.members.me); 

În acest cod, adăugăm a utilizator proprietăți la sarcina utilă a evenimentului și setați-l la obiectul utilizator al utilizatorului înregistrat. Asta înseamnă că putem modifica client-trimite-alarmă pentru a include numele utilizatorului cu mesajul de alarmă, după cum urmează:

this.channel.bind ('client-send-alarma', (data) => alert ('$ data.user.info.name: $ data.message'));

Aici, folosim data.user.info.name pentru a accesa numele utilizatorului, astfel încât să vedem ce utilizator a trimis alarma, după cum se arată aici:

Concluzie

Utilizarea canalelor de prezență nu numai că furnizează aplicației dvs. o securitate sporită a unui canal anonim, dar vă oferă, de asemenea, posibilitatea de a interoga datele utilizatorilor pentru utilizatorii care se abonează la canal. Cu canale de la Pusher, este incredibil de ușor să adăugați comunicări sigure, în timp real și bogate în funcții în aplicațiile dvs..

Cod