Maison >développement back-end >tutoriel php >Comment implémenter une communication à connexion longue en PHP ?

Comment implémenter une communication à connexion longue en PHP ?

王林
王林original
2023-08-26 16:04:441786parcourir

Comment implémenter une communication à connexion longue en PHP ?

Comment implémenter une communication à connexion longue en PHP ?

Dans les applications Web traditionnelles, des connexions courtes sont généralement utilisées pour la communication. Chaque fois qu'un client envoie une requête au serveur, le serveur traite la requête et renvoie une réponse, puis se déconnecte immédiatement. Dans certains scénarios d'application spécifiques, tels que le chat en temps réel, les messages push, etc., de longues connexions doivent être mises en œuvre pour l'interaction des données en temps réel. Cet article présentera comment implémenter une communication par connexion longue en PHP, avec des exemples de code.

Pour implémenter des connexions longues en PHP, vous pouvez utiliser les deux technologies courantes suivantes : le sondage et WebSocket.

  1. Polling
    Polling est une technologie de communication à connexion longue simple à utiliser. Le principe de base est que le client envoie continuellement des requêtes au serveur. Une fois que le serveur a reçu la requête, il vérifie s'il y a de nouvelles données à transmettre au client. Si c'est le cas, les données sont renvoyées immédiatement ; pas renvoyé jusqu'à ce que de nouvelles données soient disponibles. Une fois que le client a reçu les données renvoyées par le serveur, il continue d'envoyer la demande. L'inconvénient de cette méthode est qu'elle générera un grand nombre de requêtes invalides et augmentera la charge sur le serveur.

Ce qui suit est un exemple de code d'interrogation simple :

<?php
// 服务器端
$data = "Hello, World!"; // 待推送的数据

while (true) {
    $newData = checkNewData(); // 检查是否有新数据

    if ($newData) {
        echo $newData;
        flush(); // 立即发送响应
        break;
    }
    usleep(1000); // 休眠1毫秒,避免CPU占用过高
}

// 客户端
set_time_limit(0); // 取消超时时间限制

while (true) {
    $response = sendRequest(); // 发送请求

    if ($response) {
        echo $response;
    }

    usleep(1000); // 休眠1毫秒
}
  1. WebSocket
    WebSocket est un protocole de communication à connexion longue plus efficace et plus puissant. Il permet une communication en duplex intégral, permettant au serveur et au client de s'envoyer des messages de manière proactive sans attendre les demandes. Par rapport à l'interrogation, il réduit le nombre de requêtes invalides et convient mieux aux scénarios d'application ayant des exigences élevées en temps réel.

Ce qui suit est un exemple de code WebSocket simple :

<?php
// 服务器端
$server = new WebSocketServer("localhost", 8000); // 创建WebSocket服务器对象

while (true) {
    $client = $server->accept(); // 接受客户端连接

    while (true) {
        $message = $client->receive(); // 接收客户端消息

        if ($message) {
            // 处理客户端消息
            // $data = processMessage($message);

            // 将处理后的数据推送给客户端
            // $client->send($data);
        }
    }

    $client->close(); // 关闭客户端连接
}

// 客户端
$socket = new WebSocketClient("ws://localhost:8000"); // 创建WebSocket客户端对象

while (true) {
    $message = $socket->receive(); // 接收服务器消息

    if ($message) {
        // 处理服务器消息
        // $data = processMessage($message);

        // 将处理后的数据展示给用户
        // echo $data;
    }

    // 发送消息给服务器
    // $socket->send($message);
}

Ce qui précède est une brève introduction et un exemple de code sur la façon d'implémenter une communication de connexion longue en PHP. Pour parvenir à une communication à longue connexion plus complexe, davantage de technologies et d’outils peuvent être nécessaires. J'espère que cet article pourra vous aider à comprendre et à utiliser la communication par connexion longue.

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