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
.
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.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>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
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} <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> 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épendance InjectionInphpisadessignPatterNTHaTenHancesFlexibility, testabilité et responsabilité par le suivi de l'Externet entendance.

L'optimisation des performances PHP peut être obtenue via les étapes suivantes: 1) Utilisez require_once ou include_once en haut du script pour réduire le nombre de charges de fichiers; 2) Utiliser des instructions de prétraitement et un traitement par lots pour réduire le nombre de requêtes de base de données; 3) Configurer OPCACHE pour le cache OPCode; 4) Activer et configurer la gestion du processus d'optimisation PHP-FPM; 5) Utilisez CDN pour distribuer des ressources statiques; 6) Utiliser XDebug ou Blackfire pour l'analyse des performances du code; 7) Sélectionnez des structures de données efficaces telles que les tableaux; 8) Écrivez un code modulaire pour l'exécution d'optimisation.

OPCODECACHINGSIGNIFICITIVEMENT ImproveSPhpperFormanceByCachingCompileDcode, ReduCingServerLoDoLan

L'injection de dépendance fournit des dépendances d'objets par injection externe dans PHP, améliorant la maintenabilité et la flexibilité du code. Ses méthodes de mise en œuvre incluent: 1. Injection de constructeur, 2. Injection de valeur de set, 3. Injection d'interface. L'utilisation d'injection de dépendance peut se découpler, améliorer la testabilité et la flexibilité, mais l'attention doit être accordée à la possibilité d'augmenter la complexité et les frais généraux de performance.

La mise en œuvre de l'injection de dépendance (DI) dans PHP peut être effectuée par injection manuelle ou en utilisant des conteneurs DI. 1) L'injection manuelle transmet des dépendances par le biais de constructeurs, tels que la classe d'injection de classe d'utilisateurs. 2) Utilisez des conteneurs DI pour gérer automatiquement les dépendances, telles que la classe de conteneurs pour gérer l'enregistrement et la gamme d'utilisateurs. La mise en œuvre de DI peut améliorer la flexibilité et la testabilité du code, mais vous devez faire attention à des pièges tels que la surinjection et le localisateur de service anti-mode.

TheDiFferenceBetweenUnset () andSession_Destroy () isthatunset () clairement spécifique lesvariables tandis que la notification de lasion actuelle, tandis que lasion_destroy () terminatestheentireSession.1) useUnset () toremoveSpecificSessionvariless avec la réponse à la manière dont les éventualités

StickySessionsSenSureUserRequestSaReroutEdTothesAmeServerForsesessionDataconSistency.1) Session Identification AssignesUrserSerSerSUsing CookiesorurlModifications.2) Consommation desdirectes

PhpoffersVariousSionssionsaveHandlers: 1) fichiers: par défaut, simplebutmaybottleneckonhigh-trafficsites.2) memcached: hautes performances, idéalforspeed-criticalapplications.3) redis: SimilartomeMcached, withaddedpersistence.4)


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Version Mac de WebStorm
Outils de développement JavaScript utiles

DVWA
Damn Vulnerable Web App (DVWA) est une application Web PHP/MySQL très vulnérable. Ses principaux objectifs sont d'aider les professionnels de la sécurité à tester leurs compétences et leurs outils dans un environnement juridique, d'aider les développeurs Web à mieux comprendre le processus de sécurisation des applications Web et d'aider les enseignants/étudiants à enseigner/apprendre dans un environnement de classe. Application Web sécurité. L'objectif de DVWA est de mettre en pratique certaines des vulnérabilités Web les plus courantes via une interface simple et directe, avec différents degrés de difficulté. Veuillez noter que ce logiciel

mPDF
mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Télécharger la version Mac de l'éditeur Atom
L'éditeur open source le plus populaire
