Utilisation du Websocket du proxy inverse Nginx dans ThinkPHP6
Jun 20, 2023 pm 09:31 PMCes dernières années, Websocket est devenu un protocole de communication très important dans les applications Internet. ThinkPHP6, en tant qu'excellent framework de développement PHP, prend également en charge Websocket. Cependant, lors de l'utilisation de Websocket, nous impliquons généralement des problèmes tels que l'équilibrage entre domaines et la charge. Par conséquent, dans cet article, nous présenterons comment utiliser Websocket du proxy inverse Nginx dans ThinkPHP6.
Tout d'abord, nous devons clarifier les principes de base et les méthodes de mise en ?uvre de Websocket. Websocket utilise le processus d'établissement de liaison du protocole HTTP pour établir une connexion. Une fois la connexion établie, le protocole TCP est utilisé pour la transmission réelle des données. Par conséquent, pour l’utilisation de Websocket, nous devons considérer à la fois les parties HTTP et TCP.
Dans les applications pratiques, nous utilisons généralement le proxy inverse Nginx pour l'équilibrage de charge Websocket et le traitement inter-domaines. Voyons comment utiliser Websocket de proxy inverse Nginx dans ThinkPHP6.
1. Configuration Nginx
Nous pouvons implémenter le proxy inverse pour Websocket via le fichier de configuration Nginx. Tout d'abord, nous devons déclarer un amont dans le bloc http?:
http { upstream websocket_servers { server 127.0.0.1:8000; server 127.0.0.1:8001; } }
Dans la configuration ci-dessus, nous avons déclaré un amont nommé websocket_servers, qui contient deux adresses de serveur. De cette fa?on, lorsque le client demande Websocket, Nginx transmettra la demande à l'un des serveurs selon l'algorithme d'équilibrage de charge.
Ensuite, ajoutez la configuration suivante dans le bloc serveur?:
server { listen 80; server_name example.com; # 處理WebSocket請求 location /ws { proxy_pass http://websocket_servers; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 86400; } # 處理其他請求 location / { proxy_pass http://backend_server; proxy_set_header Host $http_host; } }
La configuration ci-dessus écoutera le port 80 et divisera la requête en deux situations. Lorsque le client demandera /ws, il sera transmis aux websocket_servers déclarés ci-dessus?; les autres demandes seront transmises au backend_server.
Pour les requêtes Websocket, nous devons définir des en-têtes de requête spéciaux, tels que Mise à niveau et Connexion. Ici, nous définissons ces en-têtes de requête via proxy_set_header. Notez que proxy_pass ici doit être le protocole http, pas le protocole https.
2. Configuration ThinkPHP6
Dans ThinkPHP6, nous devons démarrer le service Websocket via Swoole Server. Nous pouvons démarrer un simple service Websocket via le code suivant?:
<?php use SwooleWebSocketServer; use SwooleHttpRequest; use SwooleWebSocketFrame; $server = new Server("0.0.0.0", 8000, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL); $server->on("start", function (Server $server) { echo "Swoole WebSocket Server is started at http://0.0.0.0:8000 "; }); $server->on("open", function (Server $server, SwooleHttpRequest $request) { echo "connection open: {$request->fd} "; $server->push($request->fd, "hello, welcome "); }); $server->on("message", function (Server $server, Frame $frame) { echo "received message: {$frame->data} "; $server->push($frame->fd, json_encode(["hello", "world"])); }); $server->on("close", function (Server $server, $fd) { echo "connection close: {$fd} "; }); $server->start();
Dans le code ci-dessus, nous avons créé un serveur WebSocket et écouté le port 8000. Lors de l'événement ouvert, nous recevrons une demande de connexion du client et lui enverrons un message de bienvenue. Dans l'événement de message, nous recevons le message envoyé par le client et répondons par un message. (Le message de réponse ici n'est qu'un exemple simple et doit être modifié en fonction des besoins réels des applications réelles.)
Il convient de noter ici que lors de l'utilisation du Websocket du proxy inverse Nginx, nous devons modifier le Le serveur WebSocket se lie au port sous le protocole TCP, pas au port sous le protocole HTTP. Par conséquent, nous devons définir le 3ème paramètre sur SWOOLE_SOCK_TCP.
Nous pouvons également utiliser le mode multi-processus de Swoole pour améliorer les performances. Dans le 4ème paramètre, nous pouvons le définir sur SWOOLE_PROCESS et spécifier un nombre pour représenter le nombre de processus.
Dans les applications réelles, nous devrons peut-être utiliser certaines fonctions de base de données ou de cache dans le service Websocket, ce qui peut être facilement réalisé grace à la fonction d'injection de dépendances de ThinkPHP6.
3. Code front-end
Enfin, regardons comment le code front-end utilise Websocket.
var ws_url = "ws://example.com/ws"; // 注意這里的協(xié)議必須是ws var websocket = new WebSocket(ws_url); websocket.onopen = function () { console.log("WebSocket opened"); }; websocket.onmessage = function (evt) { console.log("WebSocket received message:", evt.data); }; websocket.onclose = function () { console.log("WebSocket closed"); };
Dans le code ci-dessus, nous communiquons avec le serveur via l'objet WebSocket. Lorsqu'une connexion est ouverte, l'événement onopen est déclenché, lorsqu'un message est re?u, l'événement onmessage est déclenché et lorsque la connexion est fermée, l'événement onclose est déclenché.
Il est à noter que le protocole ici doit être ws, et non http ou https.
4. Résumé
Grace à l'introduction ci-dessus, nous pouvons constater que l'utilisation du Websocket de proxy inverse Nginx dans ThinkPHP6 est une chose très simple. Il vous suffit d'effectuer une configuration de base dans Nginx et de démarrer un serveur WebSocket dans Swoole, et vous pouvez utiliser WebSocket pour communiquer sur le front-end. Si vous rencontrez des problèmes dans des applications réelles, vous pouvez vous référer au code ci-dessus pour les résoudre.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

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.

Clothoff.io
Dissolvant de vêtements AI

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

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Nginx convient plus à la gestion des connexions simultanées élevées, tandis qu'Apache convient plus aux scénarios où des configurations complexes et des extensions de module sont nécessaires. 1.Nginx est connu pour ses performances élevées et sa faible consommation de ressources, et convient à une concurrence élevée. 2.Apache est connu pour sa stabilité et ses riches extensions de modules, qui conviennent aux besoins de configuration complexes.

Nginx et Apache ont chacun leurs propres avantages et inconvénients, et le choix doit être basé sur des besoins spécifiques. 1.Nginx convient aux scénarios de concurrence élevés en raison de son architecture asynchrone non bloquant. 2. Apache convient aux scénarios à faible monnaie qui nécessitent des configurations complexes, en raison de sa conception modulaire.

Le code PHP peut être exécuté de plusieurs manières: 1. Utilisez la ligne de commande pour entrer directement le "nom de fichier PHP" pour exécuter le script; 2. Mettez le fichier dans le répertoire racine du document et accédez-y via le navigateur via le serveur Web; 3. Exécutez-le dans l'IDE et utilisez l'outil de débogage intégré; 4. Utilisez le bac à sable PHP en ligne ou la plate-forme d'exécution de code pour les tests.

La compréhension du chemin du fichier de configuration de Nginx et des paramètres initiaux est très importante car il s'agit de la première étape dans l'optimisation et la gestion d'un serveur Web. 1) Le chemin du fichier de configuration est généralement /etc/nginx/nginx.conf. La syntaxe peut être trouvée et testée à l'aide de la commande nginx-t. 2) Les paramètres initiaux incluent les paramètres globaux (tels que l'utilisateur, worker_processs) et les paramètres HTTP (tels que l'inclusion, log_format). Ces paramètres permettent la personnalisation et l'extension en fonction des exigences. Une configuration incorrecte peut entra?ner des problèmes de performances et des vulnérabilités de sécurité.

Linux System restreint les ressources utilisateur via la commande UliMIT pour éviter une utilisation excessive des ressources. 1.Ulimit est une commande shell intégrée qui peut limiter le nombre de descripteurs de fichiers (-n), la taille de la mémoire (-v), le nombre de threads (-u), etc., qui sont divisés en limite douce (valeur effective actuelle) et limite dure (limite supérieure maximale). 2. Utilisez directement la commande ulimit pour une modification temporaire, telle que Ulimit-N2048, mais elle n'est valable que pour la session en cours. 3. Pour un effet permanent, vous devez modifier /etc/security/limits.conf et les fichiers de configuration PAM, et ajouter SessionRequiredPam_limits.so. 4. Le service SystemD doit définir Lim dans le fichier unitaire

Lors de la configuration de Nginx sur Debian System, les éléments suivants sont quelques conseils pratiques: la structure de base des paramètres globaux du fichier de configuration: définir les paramètres comportementaux qui affectent l'intégralité du service NGINX, tel que le nombre de threads de travail et les autorisations d'utilisateurs en cours d'exécution. Pièce de gestion des événements: Décider comment Nginx s'occupe des connexions réseau est une configuration clé pour améliorer les performances. Pièce de service HTTP: contient un grand nombre de paramètres liés au service HTTP et peut intégrer plusieurs serveurs et blocs de localisation. Options de configuration de base Worker_Connections: Définissez le nombre maximal de connexions que chaque thread de travailleur peut gérer, généralement définie sur 1024. Multi_accept: activez le mode de réception multi-connexion et améliorez la capacité de traitement simultané. s

Nginxservceswebcontentandactsasareverseproxy, loadBalancer et m /r.1) itefficientlyServisetaticContent likehtmlandimages.2) itfunctionsasareverseproxyandloadBalancer, distribution.

Le diagnostic et les solutions pour les erreurs courantes de Nginx incluent: 1. Afficher les fichiers journaux, 2. Ajuster les fichiers de configuration, 3. Optimiser les performances. En analysant les journaux, en ajustant les paramètres de délai d'expiration et en optimisant le cache et l'équilibrage de la charge, des erreurs telles que 404, 502, 504 peuvent être efficacement résolues pour améliorer la stabilité et les performances du site Web.
