Maison >développement back-end >tutoriel php >Comment fonctionne la diffusion Laravel

Comment fonctionne la diffusion Laravel

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌original
2025-03-05 09:27:14134parcourir

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.
  • Vous pouvez implémenter votre propre serveur ou utiliser un service tiers comme Pusher. Nous préférerons ce dernier dans cet article.
  • Le client initie une connexion de socket Web au serveur de socket Web et reçoit un identifiant unique sur une connexion réussie.
  • Le côté serveur, lorsqu'un événement particulier se produit, nous informons le serveur Web-Socket en lui fournissant le nom de la chaîne et le nom de l'événement.
  • Et enfin, le serveur Web-Socket diffuse cet événement aux clients enregistrés sur cette chaîne particulière.
  • Ne vous inquiétez pas si cela ressemble trop en une seule fois; Vous aurez le point de le faire lorsque nous vous déplacerons dans cet article.
  • Fichier de configuration de diffusion
  • Ensuite, examinons le fichier de configuration de diffusion par défaut sur
config / radiodiffusion.php

.

Par défaut, les supports de lavels sont les adaptateurs multiples pour utiliser le noyau lui-même. Adaptateur log

. 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>
Comme vous pouvez le voir, nous avons modifié le pilote de diffusion par défaut en messages

. Changeons donc le fichier de migration

Base de données / migrations / xxxx_xx_xx_xxxxxx_create_messages_table.php

avant 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>
dans la base de données.

<?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>

Créer une classe d'événements

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

Echo pour s'abonner à la chaîne 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

Dans notre cas, nous allons informer les utilisateurs enregistrés lorsqu'ils reçoivent un nouveau message. Nous avons donc essayé d'imiter ce comportement dans la méthode 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

au serveur de socle Web configuré sur le utilisateur. {User_id} <pre class="brush:php;toolbar:false">...&lt;br&gt;...&lt;br&gt;BROADCAST_DRIVER=pusher&lt;br&gt;&lt;br&gt;PUSHER_APP_ID={YOUR_APP_ID}&lt;br&gt;PUSHER_APP_KEY={YOUR_APP_KEY}&lt;br&gt;PUSHER_APP_SECRET={YOUR_APP_SECRET}&lt;br&gt;PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}&lt;br&gt;...&lt;br&gt;...&lt;br&gt;</pre> 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.

Ouvrez l'URL https: // your-laravel-site-domain / message / index dans votre navigateur. Si vous n'êtes pas encore connecté, vous serez redirigé vers l'écran de connexion. Une fois que vous êtes connecté, vous devriez voir la vue diffusée que nous avons définie plus tôt - rien de fantaisie encore.

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>
Ensuite, ouvrirons l'URL http: // your-laravel-site-doMain / Message / Send dans l'autre onglet ou dans un autre navigateur. Si vous allez utiliser un autre navigateur, vous devez vous connecter pour pouvoir accéder à cette page.

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>
debug

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.

CONCLUSION

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn