Începeți cu Pusher Creați o aplicație de chat cu canale, PHP și Vue.js

Canale din Pusher este o platformă care vă permite să acordați aplicațiilor fără probleme în timp real. 

În acest post, vă voi arăta cum să scrieți componentele funcționale ale unei aplicații de chat foarte simple. Este un exemplu dezbrăcat, dar veți vedea cum canalele simplifică implementarea comunicațiilor în timp real într-o aplicație web.

 

Configurarea serverului

Aplicația noastră de server este un singur fișier PHP numit messages.php care se va ocupa de cererile POST provenite de la browser. Mesagerul nostru de mesaje va trimite mesajele clientului la serviciul Canale, care apoi va difuza aceste mesaje către alți clienți.

Când utilizați PHP pentru aplicația dvs. de server, doriți să descărcați și să utilizați biblioteca Canale și puteți instala acea bibliotecă folosind compozitorul și următoarea comandă:

compozitorul are nevoie de pushher / pushher-php-server

Codul pentru messages.php este aproape o copie exactă a ceea ce puteți găsi pe pagina Noțiuni introductive din tabloul de bord al canalelor. Există doar câteva modificări.

În primul rând, trebuie să cereți autoload.php fișier pentru a utiliza biblioteca Pusher:

cereți "./.../vendor/autoload.php";

Apoi, datele provenite de la client sunt în format JSON, deci, evident, dorim să o decodăm într-o arhivă PHP funcțională.

$ data = json_decode (fișier_get_contents ('php: // input'), true);

Apoi dorim să ne stabilim obiectul Pusher astfel încât să putem declanșa un eveniment.

$ opțiuni = array ('cluster' => 'us2'); $ pusher = Pusher \ Pusher nou ('427017da1bd2036904f3', 'c46fabbaf65c4c31686b', '534815', $ opțiuni);

Instalarea mea PHP nu funcționează dacă criptat opțiunea este activată, așa că am omis din codul meu. Kilometrajul dvs. poate varia, dar este important să rețineți că criptat opțiunea determină dacă datele trimise între server și canale sunt criptate sau nu. Nu are nimic de-a face cu conexiunea dintre canale și clienții dvs. - biblioteca client se ocupă de aceasta.

Linia finală a codului serverului nostru trimite datele de mesaj către canale:

$ pusher-> trigger ('anon-chat', 'send-message', $ date);

Ca și în cazul altor biblioteci de servere, trecem trei aspecte declanșare () metodă:

  1. Numele canalului: Anon-chat-
  2. Numele evenimentului: Trimite mesaj
  3. Volumul util: $ date

Observați că numele canalului și al evenimentului diferă de numele canalului și al evenimentului utilizat pe pagina Getting Started. Nu este necesar să creați canale noi sau să definiți evenimente personalizate în tabloul de bord; utilizați orice nume de canal și eveniment dorit în codul dvs..

Finalizarea Clientului

Clientul nostru este o pagină web cu trei componente Vue.js care alimentează interfața utilizator. Se numește componenta principală ChannelsChat, și acolo ne vom pune pe noi Pusher obiect care ascultă Trimite mesaj evenimente în Anon-chat- canal. Să folosim creată cârlig.

creat () let pusher = Pusher nou ('427017da1bd2036904f3', cluster: 'us2', criptat: true); lasa channel = pusher.subscribe ('anon-chat'); channel.bind ('send-message', funcția ()  // care urmează să fie implementată mai târziu); 

În acest cod, creăm Pusher obiect, abonați la Anon-chat- canal și ascultați Trimite mesaj evenimente.

Deoarece aceasta este o aplicație de chat, trebuie să stocăm istoricul mesajelor astfel încât cei care utilizează aplicația să poată vedea toate mesajele pe care le-au primit în timpul sesiunii. Cea mai ușoară modalitate de a realiza acest lucru este de a stoca fiecare mesaj ca element în matrice. Deci, să adăugăm a mesaje proprietăți de date pentru această componentă, după cum se arată în următorul cod:

date () retur mesaje: []

Apoi, când vom primi un mesaj, vom pur și simplu Apăsați() la matricea noastră, așa cum se arată în următorul cod:

channel.bind ('trimite mesaj', (data) => this.messages.push (data.message));

Apoi vom trece mesaje la MessageView componente:

Trimiterea mesajelor

Ultimul din codul nostru aparține MessageSend componente; când utilizatorul introduce un mesaj și dă clic pe butonul Trimiteți, trebuie să trimitem datele respective messages.php.

În primul rând, asigurați-vă că utilizatorul a introdus ceva în caseta de text. În caz contrar, nu este nevoie să faceți nimic!

sendMessage (e) if (! this.message) retur;  // va urma… 

mesaj proprietatea este legată de 's valoare, așa că vom folosi pentru a determina dacă avem orice date.

Apoi trimitem cererea POST la message.php, iar datele sunt un obiect cu a mesaj proprietate.

 // (continuare) axios.post ('/ message.php', message: this.message), apoi (() => this.message = ";). (err););

Dacă cererea are succes, ștergem mesaj valoarea proprietății, care la rândul ei eliberează (amintiți-vă că sunt obligați). Dacă cererea nu reușește, o casetă de avertizare îi spune utilizatorului că apare o eroare.

Asta e pentru cod. Deschideți astfel două ferestre de browser și indicați-le index.php. Începeți să trimiteți mesaje și ar trebui să vedeți că ambele ferestre actualizează automat și afișează mesajele.

Concluzie

După cum puteți vedea, canalele fac incredibil de ușor să adăugați rapid aplicații în timp real în comunicații în timp real și nu a necesitat chiar prea multe coduri! 

De asemenea, ați învățat că puteți crea canale și evenimente în timp ce vă scrieți codul. Nu este nevoie să le configurați înainte de a le utiliza. 

În sfârșit, ați învățat cum puteți configura aplicațiile dvs. pentru a integra comunicarea în timp real. Pur și simplu să se ocupe de intrarea utilizatorilor de la serverul dvs. și să declanșeze evenimente bazate pe acea intrare.

Cod