Maison  >  Article  >  développement back-end  >  Comment utiliser PHP pour implémenter la fonction push de message

Comment utiliser PHP pour implémenter la fonction push de message

PHPz
PHPzoriginal
2023-04-04 10:43:062212parcourir

Avec le développement rapide d'Internet, le développement d'applications Web est devenu de plus en plus courant. Dans ces applications Web, le mécanisme de transmission de messages est devenu un élément important. Le mécanisme de transmission de messages nous permet de transmettre activement des messages du backend vers le frontend, ce qui peut rendre l'interactivité des applications Web plus riche, en temps réel et efficace.

Pour implémenter le mécanisme de push de messages en PHP, vous devez utiliser la technologie WebSocket. WebSocket peut établir une connexion persistante afin que le serveur puisse envoyer des messages au client à tout moment, et que le client puisse également envoyer des messages au serveur. En PHP, d'excellentes bibliothèques WebSocket sont disponibles. Dans cet article, nous présenterons comment utiliser PHP pour implémenter la fonction de transmission de messages.

1. Utilisez la bibliothèque Workerman pour implémenter le message push

Workerman est un framework événementiel asynchrone hautes performances fonctionnant dans l'environnement PHP. Il a été créé par Wang Pan, l'auteur du célèbre framework PHP YII. Le framework implémente la prise en charge de WebSocket via l'utilisation d'extensions de socket PHP et, sur cette base, implémente la capacité de gérer les protocoles TCP/UDP.

Maintenant, montrons les étapes spécifiques pour implémenter le push de messages à l'aide de la bibliothèque Workerman :

  1. Installez la bibliothèque Workerman

Utilisez la commande suivante dans la ligne de commande pour installer la bibliothèque Workerman :

composer require workerman/workerman
  1. Créez un WebSocket server

Avant de créer un serveur WebSocket, vous devez introduire la fonction de chargement automatique dans l'environnement d'exécution de Workerman. La méthode d'introduction de la fonction de chargement automatique est la suivante :

require_once __DIR__ . '/vendor/autoload.php';

Après avoir introduit la fonction de chargement automatique, vous pouvez instancier le serveur WebSocket. Le code est le suivant :

use Workerman\Worker;
use Workerman\Lib\Timer;

$ws_worker = new Worker("websocket://0.0.0.0:2346");

//配置参数
$ws_worker->count = 4;
$ws_worker->name = 'WebSocket';

//连接事件
$ws_worker->onConnect = function($connection)
{
   echo "New connection\n";
};

//关闭事件
$ws_worker->onClose = function($connection)
{
   echo "Connection closed\n";
};

//消息事件
$ws_worker->onMessage = function($connection, $data)
{
    echo "Received: ".$data."\n";
};

Worker::runAll();

Dans le code ci-dessus, nous instancions un serveur WebSocket et définissons l'adresse d'écoute et le port (le port 2346 est utilisé ici). Après cela, nous définissons le nombre de serveurs, leurs noms, les événements de connexion, les événements d'arrêt et les événements de message.

Il est nécessaire de spécifier le nombre de processus de travail à démarrer, car sa capacité à prendre en charge un grand nombre de connexions ainsi que la vitesse et le nombre de traitements d'envoi et de réception de messages en temps réel sont liés au nombre de processus.

  1. Démarrez le serveur WebSocket

Après avoir créé le serveur WebSocket, vous devez utiliser la commande suivante dans la ligne de commande pour démarrer le serveur WebSocket :

php websocket.php start

Après cela, le serveur WebSocket sera démarré.

  1. Push messages au client

Après le démarrage du serveur WebSocket, nous devons envoyer des messages au client. La méthode pour envoyer un message est la suivante :

foreach($ws_worker->connections as $connection)
{
    $connection->send('Welcome!');
}

Dans le code ci-dessus, nous parcourons toutes les connexions sur le serveur et leur envoyons un message (le message envoyé ici est 'Bienvenue !').

2. Utilisez la bibliothèque Ratchet pour implémenter le message push

Ratchet est une bibliothèque WebSocket développée en PHP, qui permet à PHP d'effectuer une communication bidirectionnelle en temps réel. Ratchet fournit l'implémentation du serveur WebSocket et du client WebSocket, et ses fonctions sont très puissantes.

Les étapes spécifiques pour utiliser la bibliothèque Ratchet pour implémenter le push de messages sont les suivantes :

  1. Installer la bibliothèque Ratchet

Utilisez la commande suivante dans la ligne de commande pour installer la bibliothèque Ratchet :

composer require cboden/ratchet
  1. Créer un serveur WebSocket

et utilisez la bibliothèque Workerman pour implémenter le message push. De même, lorsque nous utilisons la bibliothèque Ratchet, nous devons également d'abord créer un serveur WebSocket. Le code est le suivant :

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

require dirname(__DIR__) . '/vendor/autoload.php';

class Pusher implements MessageComponentInterface
{
    private $clients;
 
    public function __construct()
    {
        $this->clients = new \SplObjectStorage;
    }
 
    public function onOpen(ConnectionInterface $conn)
    {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
    }
 
    public function onMessage(ConnectionInterface $from, $msg)
    {
        echo "New message received! ({$from->resourceId})\n";
        $numRecv = count($this->clients) - 1;
        foreach ($this->clients as $client) 
        {
            if ($from !== $client)
            {
                $client->send($msg);
            }
        }
    }
 
    public function onClose(ConnectionInterface $conn)
    {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
    }
 
    public function onError(ConnectionInterface $conn, \Exception $e)
    {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
 
$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Pusher()
        )
    ),
    19920//端口号
);
$server->run();

Dans le code ci-dessus, nous implémentons le serveur WebSocket et envoyons l'état de la connexion au client dans l'événement onOpen(), traitons le message push dans l'événement onMessage() et affichons la déconnexion de la connexion dans l'événement onClose() À l'état activé, les informations d'erreur sont affichées dans l'événement onError().

  1. Démarrez le serveur WebSocket

Après avoir créé le serveur WebSocket, vous devez utiliser la commande suivante dans la ligne de commande pour démarrer le serveur WebSocket :

php websocket.php

Après cela, le serveur WebSocket sera démarré.

  1. Push messages au client

Après le démarrage du serveur WebSocket, nous devons envoyer des messages au client. La méthode pour envoyer un message est la suivante :

$this->clients->remove($conn);
foreach ($this->clients as $client) 
{
    if ($from !== $client)
    {
        $msg = $from->resourceId.":".$msg;
        $client->send($msg);
    }
}

Dans le code ci-dessus, nous parcourons toutes les connexions sur le serveur et leur envoyons un message (le message envoyé ici est 'Bienvenue !').

Notez que les messages push de la bibliothèque Ratchet sont différents de ceux de la bibliothèque Workerman. Plus précisément, la bibliothèque Workerman utilise la méthode $connection->send()方法,而Ratchet库使用的是$client->send(). Les méthodes de transmission des messages diffèrent également entre les différentes bibliothèques.

3. Résumé

Ce qui précède est la méthode spécifique d'utilisation de PHP pour implémenter le mécanisme de transmission de messages. Grâce à ces méthodes, nous pouvons transmettre de manière proactive des messages du backend au frontend, obtenant ainsi une interaction en temps réel, efficace et riche avec les applications Web. Lors de l'utilisation de ces méthodes, nous devons prêter attention aux différences et aux caractéristiques entre chaque bibliothèque WebSocket et les appliquer de manière flexible pour mieux transmettre les messages.

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