Maison  >  Article  >  développement back-end  >  Analyse des techniques de mise en œuvre du push de messages en temps réel à l'aide de PHP

Analyse des techniques de mise en œuvre du push de messages en temps réel à l'aide de PHP

王林
王林original
2023-08-10 23:17:061244parcourir

Analyse des techniques de mise en œuvre du push de messages en temps réel à laide de PHP

Analyse des techniques de mise en œuvre du push de messages en temps réel à l'aide de PHP

Avec le développement rapide d'Internet, le push de messages en temps réel est devenu un élément indispensable des applications Web modernes. Le modèle de requête-réponse HTTP traditionnel ne peut pas répondre aux exigences en temps réel. Il existe donc des solutions de transmission de messages en temps réel basées sur des technologies telles que WebSocket et les interrogations longues. Cet article présentera comment utiliser PHP pour implémenter le push de messages en temps réel et fournira des exemples de code correspondants.

1. Push de messages en temps réel basé sur WebSocket

WebSocket est une nouvelle technologie HTML5 qui offre la possibilité d'obtenir une communication en duplex intégral sur la même connexion TCP, réalisant ainsi un push de messages en temps réel. Ce qui suit est un exemple de code d'utilisation de PHP pour implémenter le push de messages en temps réel basé sur WebSocket.

<?php
class WebSocketServer {
    private $clients = [];
    private $server;

    public function __construct($host, $port) {
        $this->server = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        socket_set_option($this->server, SOL_SOCKET, SO_REUSEADDR, 1);
        socket_bind($this->server, $host, $port);
        socket_listen($this->server);
    }

    public function run() {
        while (true) {
            $changed = array_merge([$this->server], $this->clients);
            socket_select($changed, $write, $except, null);

            foreach ($changed as $socket) {
                if ($socket == $this->server) {
                    $client = socket_accept($this->server);
                    $this->clients[] = $client;
                } else {
                    $data = socket_read($socket, 1024);
                    $this->sendMessage($data);

                    $index = array_search($socket, $this->clients);
                    unset($this->clients[$index]);
                    socket_close($socket);
                }
            }
        }
    }

    public function sendMessage($message) {
        foreach ($this->clients as $client) {
            socket_write($client, $message, strlen($message));
        }
    }
}

$server = new WebSocketServer('localhost', 8080);
$server->run();
?>

Le code ci-dessus est un simple serveur WebSocket qui peut recevoir les demandes de connexion des clients et envoyer les messages reçus à tous les clients connectés. Vous pouvez vous connecter à ce serveur via new WebSocket('ws://localhost:8080'). new WebSocket('ws://localhost:8080')来连接到该服务器。

二、基于长轮询的实时消息推送

长轮询是一种在服务器端保持连接的技术,它的工作原理是客户端向服务器发送一个请求,服务器会保持这个请求打开一段时间,直到有新的消息到达或达到一定的超时时间为止。下面是使用PHP实现基于长轮询的实时消息推送的代码示例。

<?php
while (true) {
    $message = getMessage();

    if ($message) {
        echo $message;
        flush();
        break;
    }

    sleep(1);
}
?>

上述代码会循环执行getMessage()函数,如果能获取到新的消息,则立即输出给客户端。否则,服务器会让进程休眠一秒钟,然后再次轮询。

三、使用PHP和JavaScript实现实时消息推送

除了上述的WebSocket和长轮询技术,还可以结合PHP和JavaScript实现实时消息推送。下面是一个使用PHP和JavaScript实现实时消息推送的代码示例。

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');

while (true) {
    $message = getMessage();

    if ($message) {
        echo "data: $message

";
    }

    ob_flush();
    flush();
    sleep(1);
}
?>
var source = new EventSource('stream.php');
source.addEventListener('message', function(event) {
    var message = event.data;
    // 处理消息
});

上述代码通过EventSource对象与服务器建立一个持久连接,服务器将不断地向客户端发送新的消息。当有新的消息到达时,会触发JavaScript中的message

2. Transmission de messages en temps réel basée sur une interrogation longue

L'interrogation longue est une technologie qui maintient une connexion côté serveur. Son principe de fonctionnement est que le client envoie une requête au serveur, et le serveur conservera la requête. ouvert pendant un certain temps jusqu'à ce qu'un nouveau message arrive ou qu'un certain délai soit atteint. Ce qui suit est un exemple de code pour implémenter l'envoi de messages en temps réel basés sur des interrogations longues à l'aide de PHP.

rrreee

Le code ci-dessus exécutera la fonction getMessage() en boucle si un nouveau message peut être obtenu, il sera immédiatement envoyé au client. Sinon, le serveur laisse le processus dormir pendant une seconde, puis interroge à nouveau. 🎜🎜3. Utilisez PHP et JavaScript pour implémenter le push de messages en temps réel🎜🎜En plus du WebSocket mentionné ci-dessus et de la technologie d'interrogation longue, vous pouvez également combiner PHP et JavaScript pour implémenter le push de messages en temps réel. Vous trouverez ci-dessous un exemple de code qui utilise PHP et JavaScript pour implémenter le push de messages en temps réel. 🎜rrreeerrreee🎜Le code ci-dessus établit une connexion persistante avec le serveur via l'objet EventSource, et le serveur enverra continuellement de nouveaux messages au client. Lorsqu'un nouveau message arrive, l'événement message en JavaScript sera déclenché, afin que le message puisse être traité dans la fonction de rappel correspondante. 🎜🎜Conclusion🎜🎜Cet article présente trois techniques d'utilisation de PHP pour implémenter le push de messages en temps réel, notamment le push de messages en temps réel basé sur WebSocket, le push de messages en temps réel basé sur une longue interrogation et le push de messages en temps réel implémenté à l'aide d'un combinaison de PHP et JavaScript. Selon différents scénarios et besoins, une technologie de transmission de messages en temps réel appropriée peut être sélectionnée pour répondre aux exigences en temps réel. J'espère que cet article vous aidera ! 🎜

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