I canali di Pusher sono una piattaforma che ti consente di dare alle tue app dati in tempo reale senza interruzioni.
In questo post, ti mostrerò come scrivere i componenti funzionali di una semplice applicazione di chat. È un esempio semplificato, ma vedrai in che modo i canali possono semplificare l'implementazione della comunicazione in tempo reale in un'app Web.
La nostra applicazione server è un singolo file PHP chiamato messages.php che gestirà le richieste POST provenienti dal browser. Il nostro gestore di messaggi invierà i messaggi del cliente al servizio Canali, che trasmetterà quindi tali messaggi ad altri client.
Quando si utilizza PHP per l'applicazione server, si desidera scaricare e utilizzare la libreria Canali ed è possibile installarla utilizzando Composer e il seguente comando:
il compositore richiede pusher / pusher-php-server
Il codice per messages.php è quasi una copia esatta di ciò che puoi trovare nella pagina Guida introduttiva nella dashboard di Canali. Ci sono solo alcune modifiche.
In primo luogo, è necessario richiedere il autoload.php file per utilizzare la libreria Pusher:
richiede './... /vendor/autoload.php';
Successivamente, i dati provenienti dal client sono in formato JSON, quindi ovviamente vogliamo decodificarlo in un array PHP funzionante.
$ data = json_decode (file_get_contents ('php: // input'), vero);
Vogliamo quindi impostare il nostro oggetto Pusher in modo che possiamo quindi attivare un evento.
$ options = array ('cluster' => 'us2'); $ pusher = new Pusher \ Pusher ('427017da1bd2036904f3', 'c46fabbaf65c4c31686b', '534815', $ opzioni);
La mia installazione di PHP non funziona se il criptato
l'opzione è abilitata, quindi l'ho omessa dal mio codice. Il tuo chilometraggio può variare, ma è importante notare che il criptato
l'opzione determina se i dati inviati tra il server e i Canali sono crittografati o meno. Non ha nulla a che fare con la connessione tra Canali e i tuoi client - la libreria client li gestisce.
La riga finale del codice del nostro server invia i dati del messaggio ai canali:
$ pusher-> trigger ('anon-chat', 'send-message', $ data);
Come con altre librerie server, passiamo tre cose al trigger ()
metodo:
anon-Chat
invia messaggio
$ data
Si noti che il canale e i nomi degli eventi sono diversi dal nome del canale e dell'evento utilizzato nella pagina Guida introduttiva. Non è necessario creare nuovi canali o definire eventi personalizzati nella dashboard; basta usare qualsiasi nome di canale e evento nel codice.
Il nostro client è una pagina Web con tre componenti Vue.js che alimentano l'interfaccia utente. Il componente principale è chiamato ChannelsChat
, ed è dove metteremo il nostro Pusher
oggetto che ascolta invia messaggio
eventi nel anon-Chat
canale. Usiamo il creato
gancio.
created () let pusher = new Pusher ('427017da1bd2036904f3', cluster: 'us2', criptato: vero); lascia channel = pusher.subscribe ('anon-chat'); channel.bind ('send-message', function () // da implementare in seguito);
In questo codice, creiamo il Pusher
oggetto, iscriviti al anon-Chat
canale, e ascoltare invia messaggio
eventi.
Poiché si tratta di un'applicazione di chat, è necessario memorizzare la cronologia dei messaggi in modo che chiunque usi l'applicazione possa vedere tutti i messaggi ricevuti durante la loro sessione. Il modo più semplice per farlo è archiviare ogni messaggio come elemento nell'array. Quindi aggiungiamo un messaggi
proprietà data a questo componente, come mostrato nel seguente codice:
data () return messages: []
Quindi, quando riceviamo un messaggio, lo faremo semplicemente Spingere()
al nostro array, come mostrato nel seguente codice:
channel.bind ('send-message', (data) => this.messages.push (data.message));
Passeremo quindi al messaggi
al MessageView
componente:
L'ultimo del nostro codice appartiene al MessageSend
componente; quando l'utente digita un messaggio e fa clic sul pulsante Invia, è necessario inviare tali dati a messages.php
.
Innanzitutto, assicuriamoci che l'utente abbia digitato qualcosa nella casella di testo. Altrimenti, non c'è bisogno di fare nulla!
sendMessage (e) if (! this.message) return; // continua…
Il Messaggio
la proprietà è legata al valore, quindi lo useremo per determinare se abbiamo dati.
Successivamente, inviamo la richiesta POST a message.php
, e il dato è un oggetto con a Messaggio
proprietà.
// (segue) axios.post ('/ message.php', message: this.message). then (() => this.message = ";). catch ((err) => alert (err););
Se la richiesta ha esito positivo, cancelliamo il Messaggio
valore della proprietà, che a sua volta cancella il valore (ricorda che sono legati). Se la richiesta non riesce, una finestra di avviso informa l'utente che si è verificato un errore.
Questo è tutto per il codice. Quindi apri due finestre del browser e indirizzale a index.php
. Inizia a inviare messaggi e dovresti vedere entrambe le finestre aggiornare automaticamente e visualizzare i messaggi.
Come puoi vedere, Canali rende incredibilmente facile aggiungere rapidamente comunicazioni in tempo reale alle tue applicazioni, e non ha nemmeno bisogno di molto codice!
Hai anche imparato che puoi creare canali ed eventi al volo mentre scrivi il tuo codice. Non è necessario impostarli prima di usarli.
E infine, hai imparato come configurare le tue applicazioni per incorporare la comunicazione in tempo reale. Gestisci semplicemente l'input dell'utente in entrata dal tuo server e attiva gli eventi in base a quell'input.