Implémenter un service push côté serveur hautes performances à l'aide de Memcache et PHP

WBOY
Libérer: 2023-05-16 09:28:01
original
1168 Les gens l'ont consulté

Avec le développement continu de la technologie Internet, nos exigences de performances pour les applications réseau sont de plus en plus élevées. Partant de ce principe, le service push côté serveur, en tant que solution de communication en temps réel, est adopté par de plus en plus d'applications. Cet article explique comment utiliser Memcache et PHP pour implémenter des services push côté serveur hautes performances.

1. Qu'est-ce que le service push côté serveur ?

Le service push côté serveur signifie que le serveur envoie activement des données au client sans exiger que le client demande activement des données. Par exemple, dans un salon de discussion, après qu'un utilisateur a envoyé un message, tous les utilisateurs en ligne peuvent recevoir le message sans que chaque utilisateur ait à le demander. Cela peut considérablement améliorer les performances en temps réel et également réduire la pression sur le serveur.

2. Le rôle de Memcache

Memcache est un outil de mise en cache des données. Sa fonction est de stocker les données en mémoire pour accélérer la lecture et l'écriture des données. Dans le service push côté serveur, le rôle de Memcache est de mettre en cache les messages qui doivent être envoyés pour réduire la pression sur le serveur et la base de données.

3. Utilisez PHP pour implémenter le service push côté serveur

Ensuite, nous utiliserons PHP pour implémenter le service push côté serveur. Cet article supposera que nous disposons déjà d'un système de salle de discussion, qui contient les trois parties suivantes :

  1. Liste des utilisateurs en ligne

La liste des utilisateurs en ligne fait référence à la liste des utilisateurs actuellement dans la salle de discussion. Nous devons mettre en cache la liste des utilisateurs en ligne dans Memcache pour un accès rapide.

  1. Liste des messages

La liste des messages fait référence à la liste des messages envoyés par tous les utilisateurs. Nous devons mettre en cache la liste des messages dans Memcache pour un accès rapide. Dans le même temps, nous devons ajouter un champ d'horodatage à la liste des messages pour permettre au client de déterminer s'il y a de nouveaux messages.

  1. Service Push

Le service Push fait référence à un service qui envoie activement des messages qui doivent être poussés au client. Dans notre système, nous utiliserons WebSocket pour implémenter le service push.

Voici les étapes détaillées de mise en œuvre :

  1. Mise en cache de la liste des utilisateurs en ligne

Nous pouvons ajouter l'utilisateur à la liste des utilisateurs en ligne lorsqu'il se connecte. Ensuite, lorsque l'utilisateur se déconnecte, supprimez-le de la liste des utilisateurs en ligne. La liste des utilisateurs en ligne est mise en cache comme suit :

$memcache = new Memcache;
$memcache->addServer('localhost', 11211);

// Ajouter la liste des utilisateurs en ligne au cache
$onlineUsers = array( 'user1' , 'user2', 'user3');
$memcache->set('online_users', $onlineUsers, 0, 0);

// Récupérer la liste des utilisateurs en ligne à partir du cache
$onlineUsers = $ memcache-> get('online_users');

  1. Liste des messages du cache

Nous pouvons l'ajouter à la liste des messages lorsque l'utilisateur envoie un message. Ensuite, dans le service push, envoyez la liste des messages au client. Nous devons ajouter un champ d'horodatage à la liste des messages pour permettre au client de déterminer s'il y a de nouveaux messages. La liste des messages est mise en cache comme suit :

$memcache = new Memcache;
$memcache->addServer('localhost', 11211);

// Ajouter la liste des messages au cache
$messages = array(

array('user' => 'user1', 'message' => 'hello', 'timestamp' => time()),
array('user' => 'user2', 'message' => 'world', 'timestamp' => time())
Copier après la connexion

);
$memcache->set('messages', $messages, 0, 0);

// Récupère la liste des messages du cache
$messages = $memcache->get('messages');

  1. implémentation du service Push

Nous utiliserons WebSocket pour implémenter le service push. WebSocket est un protocole de communication en temps réel qui peut être utilisé dans les navigateurs modernes. En PHP, nous pouvons utiliser Ratchet pour implémenter WebSocket. Voici comment le service push est implémenté :

//Introduire la bibliothèque Ratchet
require __DIR__.'/vendor/autoload.php';

use RatchetMessageComponentInterface
use RatchetConnectionInterface

// WebSocket push service
class Chat; implémente MessageComponentInterface
{

protected $clients;

public function __construct() 
{
    $this->clients = new SplObjectStorage;
}

public function onOpen(ConnectionInterface $conn) 
{
    $this->clients->attach($conn);
}

public function onMessage(ConnectionInterface $from, $msg) 
{
    $memcache = new Memcache;
    $memcache->addServer('localhost', 11211);

    // 获取在线用户列表和消息列表
    $onlineUsers = $memcache->get('online_users');
    $messages = $memcache->get('messages');

    // 发送消息给所有客户端
    foreach ($this->clients as $client) 
    {
        $client->send(json_encode(array(
            'type' => 'message',
            'online_users' => $onlineUsers,
            'messages' => $messages
        )));
    }
}

public function onClose(ConnectionInterface $conn) 
{
    $this->clients->detach($conn);
}

public function onError(ConnectionInterface $conn, Exception $e) 
{
    $conn->close();
}
Copier après la connexion

}

// Créez un serveur WebSocket et démarrez
$app = new RatchetApp('localhost', 8080);
$app->route('/chat', new Chat);
$ app-> ;run();

4. Implémentation côté client

Le client peut être implémenté à l'aide de n'importe quel navigateur moderne. Voici le code HTML et JavaScript du client :


<. ;html>

<title>WebSocket Chat</title>
Copier après la connexion


<ul id="messages"></ul>

<form action="">
    <input id="message" type="text">
    <button>Send</button>
</form>

<script>
    var ws = new WebSocket("ws://localhost:8080/chat");

    ws.onmessage = function(event) {
        var data = JSON.parse(event.data);

        // 更新在线用户列表
        var onlineUsers = data.online_users;
        for (var i = 0; i < onlineUsers.length; i++) {
            // add online user to list
        }

        // 更新消息列表
        var messages = data.messages;
        for (var i = 0; i < messages.length; i++) {
            // add message to list
        }
    };

    document.querySelector("form").addEventListener("submit", function(event) {
        event.preventDefault();
        var input = document.querySelector("input#message");
        ws.send(input.value);
        input.value = "";
    });
</script>
Copier après la connexion


Résumé

Cet article présente comment utiliser Memcache et PHP pour implémenter un service Push côté serveur hautes performances. En mettant en cache la liste des utilisateurs en ligne et la liste des messages en mémoire, nous pouvons réduire considérablement la pression sur le serveur et la base de données. Dans le même temps, une communication en temps réel peut être réalisée à l'aide du protocole WebSocket, améliorant ainsi les performances en temps réel.

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal