Aujourd'hui, nous allons explorer le concept de diffusion dans le cadre Web de Laravel. Il vous permet d'envoyer des notifications du côté client lorsque quelque chose se produit du côté du serveur. Dans cet article, nous allons utiliser la bibliothèque de poussoir tierce pour envoyer des notifications du côté client.
Si vous avez toujours voulu envoyer des notifications du serveur au client lorsque quelque chose se passe sur un serveur à Laravel, vous recherchez la fonction de diffusion. Maintenant, lorsque l'utilisateur A envoie un message à l'utilisateur B, vous souhaitez informer l'utilisateur B en temps réel. Vous pouvez afficher une fenêtre contextuelle ou une boîte alerte qui informe l'utilisateur B du nouveau message!
C'est le cas d'utilisation parfait pour parcourir le concept de diffusion à Laravel, et c'est ce que nous implémenterons dans cet article.
Si vous vous demandez comment le serveur pourrait envoyer des notifications au client, il utilise des sockets sous le capot pour y accomplir. Comprenons le flux de base des sockets avant de plonger plus profondément dans l'implémentation réelle.
Tout d'abord, vous avez besoin d'un serveur qui prend en charge le protocole de sockts Web et permet au client d'établir une connexion de socket Web.
.
. Bien sûr, si vous utilisez l'adaptateur Pusher comme pilote de diffusion par défaut.
<?php<br><br>return [<br><br> /*<br> |--------------------------------------------------------------------------<br> | Default Broadcaster<br> |--------------------------------------------------------------------------<br> |<br> | This option controls the default broadcaster that will be used by the<br> | framework when an event needs to be broadcast. You may set this to<br> | any of the connections defined in the "connections" array below.<br> |<br> | Supported: "pusher", "redis", "log", "null"<br> |<br> */<br><br> 'default' => env('BROADCAST_DRIVER', 'null'),<br><br> /*<br> |--------------------------------------------------------------------------<br> | Broadcast Connections<br> |--------------------------------------------------------------------------<br> |<br> | Here you may define all of the broadcast connections that will be used<br> | to broadcast events to other systems or over websockets. Samples of<br> | each available type of connection are provided inside this array.<br> |<br> */<br><br> 'connections' => [<br><br> 'pusher' => [<br> 'driver' => 'pusher',<br> 'key' => env('PUSHER_APP_KEY'),<br> 'secret' => env('PUSHER_APP_SECRET'),<br> 'app_id' => env('PUSHER_APP_ID'),<br> 'options' => [<br> 'cluster' => env('PUSHER_APP_CLUSTER'),<br> 'useTLS' => true,<br> ],<br> ],<br><br> 'redis' => [<br> 'driver' => 'redis',<br> 'connection' => 'default',<br> ],<br><br> 'log' => [<br> 'driver' => 'log',<br> ],<br><br> 'null' => [<br> 'driver' => 'null',<br> ],<br><br> ],<br><br>];<br>
. Changeons donc le fichier de migration
Base de données / migrations / xxxx_xx_xx_xxxxxx_create_messages_table.phpavant d'exécuter la commande migrate.
Maintenant, maintenant, exécutons le tableau des messages...<br>...<br>BROADCAST_DRIVER=pusher<br><br>PUSHER_APP_ID={YOUR_APP_ID}<br>PUSHER_APP_KEY={YOUR_APP_KEY}<br>PUSHER_APP_SECRET={YOUR_APP_SECRET}<br>PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}<br>...<br>...<br>
<?php<br><br>return [<br><br> /*<br> |--------------------------------------------------------------------------<br> | Default Broadcaster<br> |--------------------------------------------------------------------------<br> |<br> | This option controls the default broadcaster that will be used by the<br> | framework when an event needs to be broadcast. You may set this to<br> | any of the connections defined in the "connections" array below.<br> |<br> | Supported: "pusher", "redis", "log", "null"<br> |<br> */<br><br> 'default' => env('BROADCAST_DRIVER', 'null'),<br><br> /*<br> |--------------------------------------------------------------------------<br> | Broadcast Connections<br> |--------------------------------------------------------------------------<br> |<br> | Here you may define all of the broadcast connections that will be used<br> | to broadcast events to other systems or over websockets. Samples of<br> | each available type of connection are provided inside this array.<br> |<br> */<br><br> 'connections' => [<br><br> 'pusher' => [<br> 'driver' => 'pusher',<br> 'key' => env('PUSHER_APP_KEY'),<br> 'secret' => env('PUSHER_APP_SECRET'),<br> 'app_id' => env('PUSHER_APP_ID'),<br> 'options' => [<br> 'cluster' => env('PUSHER_APP_CLUSTER'),<br> 'useTLS' => true,<br> ],<br> ],<br><br> 'redis' => [<br> 'driver' => 'redis',<br> 'connection' => 'default',<br> ],<br><br> 'log' => [<br> 'driver' => 'log',<br> ],<br><br> 'null' => [<br> 'driver' => 'null',<br> ],<br><br> ],<br><br>];<br>
Chaque fois que vous souhaitez élever un événement personnalisé dans Laravel, vous devez créer une classe pour cet événement. Sur la base du type d'événement, Laravel réagit en conséquence et prend les actions nécessaires.
Si l'événement est un événement normal, Laravel appelle les classes d'auditeur associées. D'un autre côté, si l'événement est du type de diffusion, Laravel envoie cet événement au serveur Web-Socket qui est configuré dans le fichier Config / Broadcasting.php . et d'autres informations liées au poussoir nécessaires.
En déplaçant plus loin, nous utilisons la méthode privée
utilisateur. {user_id} <p>. Comme nous l'avons discuté précédemment, le client doit s'authentifier avant de s'abonner au canal privé. Ainsi, l'objet <code> echo
effectue l'authentification nécessaire en envoyant le XHR en arrière-plan avec les paramètres nécessaires. Enfin, Laravel essaie de trouver le utilisateur. {User_id}
, et il devrait correspondre à l'itinéraire que nous avons défini dans le fichier Routes / Channels.php private
. À partir de maintenant, nous serons en mesure de recevoir tous les événements entrants sur cette chaîne. user.{USER_ID}
Echo
Dans notre cas, nous voulons écouter l'événement newMessageNotification <code>user.{USER_ID}
, et donc nous avons utilisé la méthode écouter <strong> de l'objet <code> echo
pour y parvenir. Pour garder les choses simples, nous allons simplement alerter le message que nous avons reçu du serveur Pusher.
Donc, il s'agissait de la configuration de la réception des événements du serveur de sockés Web. Ensuite, nous allons passer par la méthode Envoyer <code>user.{USER_ID}
dans le fichier de contrôleur qui soulève l'événement de diffusion.
Faisons rapidement le code de la méthode Envoyer <code>NewMessageNotification
. listen
Echo
Envoyer <p>. Étant donné que l'événement <code> newMessageNotification <code>send
est de de type broadcastNow
, Laravel charge la configuration de diffusion par défaut du fichier config / radioclasting.php send
. Enfin, il diffuse l'événement newMessageNotification
utilisateur. {User_id} <div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">...<br>...<br>BROADCAST_DRIVER=pusher<br><br>PUSHER_APP_ID={YOUR_APP_ID}<br>PUSHER_APP_KEY={YOUR_APP_KEY}<br>PUSHER_APP_SECRET={YOUR_APP_SECRET}<br>PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}<br>...<br>...<br></pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div> canal. <p></p>
<p> Dans notre cas, l'événement sera diffusé sur le serveur de socle Web Pusher sur le canal <code>user.{USER_ID}
. Si l'ID de l'utilisateur du destinataire est 1
, l'événement sera diffusé sur la chaîne user.1
. Comme nous l'avons discuté précédemment, nous avons déjà une configuration qui écoute les événements de cette chaîne, donc il devrait être en mesure de recevoir cet événement, et la boîte d'alerte est affichée à l'utilisateur! que nous avons construit jusqu'à présent.
En fait, Laravel a déjà fait un peu de travail en arrière-plan pour vous. Comme nous avons activé le paramètre
fourni par la bibliothèque Client Pusher, il enregistre tout dans la console du navigateur à des fins de débogage. Voyons ce qui est connecté à la console lorsque vous accédez à la page http: // your-laravel-site-domain / message / index.
Il a ouvert la connexion Web-Socket avec le serveur Web-Socket Pusher et s'est abonné pour écouter des événements sur la chaîne privée. Bien sûr, vous pouvez avoir un nom de canal différent dans votre cas en fonction de l'ID de l'utilisateur avec lequel vous êtes connecté. Maintenant, gardons cette page ouverte alors que nous déménageons pour tester la méthode Pusher.logToConsole
.
<?php<br><br>return [<br><br> /*<br> |--------------------------------------------------------------------------<br> | Default Broadcaster<br> |--------------------------------------------------------------------------<br> |<br> | This option controls the default broadcaster that will be used by the<br> | framework when an event needs to be broadcast. You may set this to<br> | any of the connections defined in the "connections" array below.<br> |<br> | Supported: "pusher", "redis", "log", "null"<br> |<br> */<br><br> 'default' => env('BROADCAST_DRIVER', 'null'),<br><br> /*<br> |--------------------------------------------------------------------------<br> | Broadcast Connections<br> |--------------------------------------------------------------------------<br> |<br> | Here you may define all of the broadcast connections that will be used<br> | to broadcast events to other systems or over websockets. Samples of<br> | each available type of connection are provided inside this array.<br> |<br> */<br><br> 'connections' => [<br><br> 'pusher' => [<br> 'driver' => 'pusher',<br> 'key' => env('PUSHER_APP_KEY'),<br> 'secret' => env('PUSHER_APP_SECRET'),<br> 'app_id' => env('PUSHER_APP_ID'),<br> 'options' => [<br> 'cluster' => env('PUSHER_APP_CLUSTER'),<br> 'useTLS' => true,<br> ],<br> ],<br><br> 'redis' => [<br> 'driver' => 'redis',<br> 'connection' => 'default',<br> ],<br><br> 'log' => [<br> 'driver' => 'log',<br> ],<br><br> 'null' => [<br> 'driver' => 'null',<br> ],<br><br> ],<br><br>];<br>
send
Dès que vous ouvrez la page http: // your-laravel-site-doMain / Message / Send, vous devriez pouvoir voir un message d'alerte dans l'autre onglet à http: // votre avis de contre-domain / index. s'est produit.
Comme vous pouvez le voir, il vous indique que vous venez de recevoir l'événement
du serveur de socle Web Pusher sur le canal
.En fait, vous pouvez également voir ce qui se passe là-bas à l'extrémité du poussoir. Accédez à votre compte Pusher et accédez à votre application. Sous la console
...<br>...<br>BROADCAST_DRIVER=pusher<br><br>PUSHER_APP_ID={YOUR_APP_ID}<br>PUSHER_APP_KEY={YOUR_APP_KEY}<br>PUSHER_APP_SECRET={YOUR_APP_SECRET}<br>PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}<br>...<br>...<br>
AppEventsNewMessageNotification
Console private-user.2
, vous devriez pouvoir voir des messages enregistrés.
et cela nous amène à la fin de cet article! J'espère que ce n'était pas trop en un seul coup car j'ai essayé de simplifier les choses à ma connaissance.
Aujourd'hui, nous avons parcouru l'une des caractéristiques les moins discutées de Laravel - Broadcasting. Il vous permet d'envoyer des notifications en temps réel à l'aide de sockets Web. Tout au long de cet article, nous avons construit un exemple réel qui a démontré le concept susmentionné.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!