Maison cadre php Workerman Push en temps réel basé sur Workerman (abandon des sondages ajax)

Push en temps réel basé sur Workerman (abandon des sondages ajax)

Jan 20, 2020 pm 01:43 PM
workerman

La colonne suivante du Tutoriel Workerman vous présentera comment mettre en œuvre le push en temps réel basé sur Workerman et abandonner les sondages ajax. J'espère que cela sera utile aux amis dans le besoin. !

Push en temps réel basé sur Workerman (abandon des sondages ajax)

Parlons d'abord de ces choses :

TCP/IP

TCP/IP est une suite de protocoles Elle est divisée en trois couches : la couche réseau, la couche transport et la couche application.

Au niveau de la couche réseau, il existe le protocole IP, le protocole ICMP, le protocole ARP, le protocole RARP et le protocole BOOTP.

Il existe le protocole TCP et le protocole UDP dans la couche transport.

Au niveau de la couche application, il y a :

TCP inclut FTP, HTTP, TELNET, SMTP et d'autres protocoles

UDP inclut DNS, TFTP et autres protocoles

Connexion courte

Connecter->Transférer les données->Fermer la connexion

HTTP est sans état à chaque fois que le navigateur et le serveur effectuent une opération. Opération HTTP, la connexion est établie une fois, mais la connexion est terminée lorsque la tâche est terminée.

On peut aussi dire ainsi : une connexion courte signifie que la connexion SOCKET est envoyée et les données sont reçues puis déconnectées immédiatement.

Connexion longue

Connecter->Transférer des données->Rester connecté-> Transmettre des données->. . . ->Fermer la connexion.

Une connexion longue signifie qu'après avoir établi une connexion SOCKET, elle reste connectée, qu'elle soit utilisée ou non, mais la sécurité est mauvaise.

Connexion longue HTTP

HTTP peut également établir des connexions longues, utilisez Connection:keep-alive, HTTP 1.1 par défaut est des connexions persistantes. En comparant HTTP1.1 et HTTP1.0, la plus grande différence est l'ajout de la prise en charge des connexions persistantes (il semble que le dernier http1.0 puisse spécifier explicitement le maintien en vie), mais il est toujours sans état ou n'est pas fiable.

Quand utiliser la connexion longue et la connexion courte ?

Les connexions longues sont principalement utilisées pour les opérations fréquentes, la communication point à point, et le nombre de connexions ne peut pas être trop élevé. Chaque connexion TCP nécessite une négociation en trois étapes, ce qui prend du temps. Si chaque opération est d'abord connectée puis exécutée, la vitesse de traitement sera considérablement réduite. Par conséquent, elle n'est pas déconnectée après chaque opération et le paquet de données est envoyé directement pendant. le premier traitement. C'est OK, pas besoin d'établir une connexion TCP. Par exemple : des connexions longues sont utilisées pour les connexions à la base de données. Des communications fréquentes avec des connexions courtes entraîneront des erreurs de socket, et la création fréquente de sockets est également un gaspillage de ressources.

Et les services http comme les sites WEB utilisent généralement des liens courts, car les connexions longues vont consommer une certaine quantité de ressources pour le serveur, et comme les sites WEB, il y en a des milliers fréquemment Même si des centaines de millions de connexions client utilisent des connexions courtes, certaines ressources seront économisées. Si des connexions longues sont utilisées et qu'il y a des milliers d'utilisateurs en même temps, il est concevable que si chaque utilisateur occupe une connexion. Par conséquent, le degré de concurrence est important, mais chaque utilisateur doit utiliser une connexion courte s'il n'a pas besoin d'opérations fréquentes.

ouvrierQu'est-ce que c'est ? Workerman est un framework de serveur socket PHP open source et hautes performances développé uniquement en PHP. Il est largement utilisé dans le développement d'applications mobiles, de communications mobiles, d'applets WeChat, de serveurs de jeux mobiles, de jeux en ligne, de salons de discussion PHP, de communications matérielles, de maisons intelligentes, de l'Internet des véhicules, de l'Internet des objets et d'autres domaines. Prend en charge les connexions longues TCP, prend en charge Websocket, HTTP et d'autres protocoles, ainsi que les protocoles personnalisés. Il possède de nombreux composants hautes performances tels que Mysql asynchrone, Redis asynchrone, Http asynchrone, file d'attente de messages asynchrone, etc.

Allons droit au but : afin d'établir une communication en temps réel, nous utilisons souvent le mécanisme d'interrogation ajax, comme le montre la figure :

Push en temps réel basé sur Workerman (abandon des sondages ajax)

Vous peut utiliser la méthode Workerman plus tard Implémentation, le projet est également écrit par TP, le manuel officiel dit :

Il est recommandé de combiner avec d'autres frameworks mvc de la manière indiquée ci-dessus (ThinkPHP à titre d'exemple) :

1. ThinkPHP et Workerman sont deux indépendants. Le système est déployé indépendamment (peut être déployé sur différents serveurs) sans interférer l'un avec l'autre.

2. ThinkPHP utilise le protocole HTTP pour fournir des pages Web à rendre et à afficher dans le navigateur.

3. Le js de la page fournie par ThinkPHP initie une connexion websocket et se connecte au travailleur

4. Après la connexion, un paquet de données (comprenant un nom d'utilisateur, un mot de passe ou une sorte de jeton). chaîne) est envoyé au travailleur pour vérification. À quel utilisateur appartient la connexion Websocket.

5. Ce n'est que lorsque ThinkPHP a besoin de transmettre des données au navigateur qu'il appelle l'interface socket du travailleur pour transmettre les données.

6. Les requêtes restantes sont toujours traitées selon la méthode HTTP originale de ThinkPHP.

Résumé :

Utilisez Workerman comme canal qui peut être poussé vers le navigateur, et n'appelez l'interface Workerman pour terminer le push que lorsque les données doivent être poussées vers le navigateur. La logique métier est entièrement complétée dans ThinkPHP.

ok, ici, exécutez le conteneur Workerman. Notez qu'il fonctionne en mode CLI

Push en temps réel basé sur Workerman (abandon des sondages ajax)

Ensuite, nous jouerons comme ça dans la réception des informations. notre projet. Code ci-joint

<script>
    // 连接服务端
    var socket = io(&#39;http://127.0.0.1:2120&#39;);
    // uid可以是自己网站的用户id,以便针对uid推送
    uid = 123;
    // socket连接后以uid登录
    socket.on(&#39;connect&#39;, function(){
    socket.emit(&#39;login&#39;, uid);
    });
    // 后端推送来消息时
    socket.on(&#39;new_msg&#39;, function(msg){
        console.log("收到消息:"+msg);  //自己业务逻辑处理
    });
    
</script>
Copier après la connexion

Ensuite, nous ajoutons

// 指明给谁推送,为空表示向所有在线用户推送
        $to_uid = "123";
        // 推送的url地址
        $push_api_url = "http://127.0.0.1:2121/";
        $post_data = array(
           "type" => "publish",
           "content" => "数据",
           "to" => $to_uid, 
        );
        $ch = curl_init ();
        curl_setopt ( $ch, CURLOPT_URL, $push_api_url );
        curl_setopt ( $ch, CURLOPT_POST, 1 );
        curl_setopt ( $ch, CURLOPT_HEADER, 0 );
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
        curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data );
        curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Expect:"));
        $return = curl_exec ( $ch );
        curl_close ( $ch );
        var_export($return);
Copier après la connexion

lorsque l'utilisateur envoie des informations à l'utilisateur. Parmi eux, le code push core dans Workererman implémente

// 全局数组保存uid在线数据
$uidConnectionMap = array();
// 记录最后一次广播的在线用户数
$last_online_count = 0;
 
 
// PHPSocketIO服务
$sender_io = new SocketIO(2120);
// 客户端发起连接事件时,设置连接socket的各种事件回调
 
// 当$sender_io启动后监听一个http端口,通过这个端口可以给任意uid或者所有uid推送数据
$sender_io->on(&#39;workerStart&#39;, function(){
    // 监听一个http端口
    $inner_http_worker = new Worker(&#39;http://0.0.0.0:2121&#39;);
    // 当http客户端发来数据时触发
    $inner_http_worker->onMessage = function($http_connection, $data){
        global $uidConnectionMap;
        $_POST = $_POST ? $_POST : $_GET;
        // 推送数据的url格式 type=publish&to=uid&content=xxxx
        switch(@$_POST[&#39;type&#39;]){
            case &#39;publish&#39;:
                global $sender_io;
                $to = @$_POST[&#39;to&#39;];
                $_POST[&#39;content&#39;] = htmlspecialchars(@$_POST[&#39;content&#39;]);
                // 有指定uid则向uid所在socket组发送数据
                if($to){
                    $sender_io->to($to)->emit(&#39;new_msg&#39;, $_POST[&#39;content&#39;]);
                // 否则向所有uid推送数据
                }else{
                    $sender_io->emit(&#39;new_msg&#39;, @$_POST[&#39;content&#39;]);
                }
                // http接口返回,如果用户离线socket返回fail
                if($to && !isset($uidConnectionMap[$to])){
                    return $http_connection->send(&#39;offline&#39;);
                }else{
                    return $http_connection->send(&#39;ok&#39;);
                }
        }
        return $http_connection->send(&#39;fail&#39;);
    };
    
});
 
if(!defined(&#39;GLOBAL_START&#39;))
{
    Worker::runAll();
}
Copier après la connexion

ok, et vous avez terminé !

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 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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Implémenter le téléchargement et le téléchargement de fichiers dans les documents Workerman Implémenter le téléchargement et le téléchargement de fichiers dans les documents Workerman Nov 08, 2023 pm 06:02 PM

Pour implémenter le téléchargement et le téléchargement de fichiers dans des documents Workerman, des exemples de code spécifiques sont requis Introduction : Workerman est un framework de communication réseau asynchrone PHP hautes performances, simple, efficace et facile à utiliser. Dans le développement réel, le téléchargement et le téléchargement de fichiers sont des exigences fonctionnelles courantes. Cet article explique comment utiliser le framework Workerman pour implémenter le téléchargement et le téléchargement de fichiers, et donne des exemples de code spécifiques. 1. Téléchargement de fichiers : le téléchargement de fichiers fait référence à l'opération de transfert de fichiers de l'ordinateur local vers le serveur. Ce qui suit est utilisé

Comment mettre en œuvre l'utilisation de base des documents Workerman Comment mettre en œuvre l'utilisation de base des documents Workerman Nov 08, 2023 am 11:46 AM

Introduction à la façon d'implémenter l'utilisation de base des documents Workerman : Workerman est un framework de développement PHP hautes performances qui peut aider les développeurs à créer facilement des applications réseau à haute concurrence. Cet article présentera l'utilisation de base de Workerman, y compris l'installation et la configuration, la création de services et de ports d'écoute, la gestion des demandes des clients, etc. Et donnez des exemples de code correspondants. 1. Installez et configurez Workerman. Entrez la commande suivante sur la ligne de commande pour installer Workerman : c

Lequel est le meilleur, Swoole ou Workerman ? Lequel est le meilleur, Swoole ou Workerman ? Apr 09, 2024 pm 07:00 PM

Swoole et Workerman sont tous deux des frameworks de serveur PHP hautes performances. Connu pour son traitement asynchrone, ses excellentes performances et son évolutivité, Swoole convient aux projets qui doivent gérer un grand nombre de requêtes simultanées et un débit élevé. Workerman offre la flexibilité des modes asynchrone et synchrone, avec une API intuitive mieux adaptée à la facilité d'utilisation et aux projets gérant des volumes de concurrence inférieurs.

Développement Workerman : Comment mettre en œuvre des appels vidéo en temps réel basés sur le protocole UDP Développement Workerman : Comment mettre en œuvre des appels vidéo en temps réel basés sur le protocole UDP Nov 08, 2023 am 08:03 AM

Développement Workerman : appel vidéo en temps réel basé sur le protocole UDP Résumé : Cet article présentera comment utiliser le framework Workerman pour implémenter la fonction d'appel vidéo en temps réel basée sur le protocole UDP. Nous aurons une compréhension approfondie des caractéristiques du protocole UDP et montrerons comment créer une application d'appel vidéo en temps réel simple mais complète à travers des exemples de code. Introduction : Dans la communication réseau, les appels vidéo en temps réel sont une fonction très importante. Le protocole TCP traditionnel peut rencontrer des problèmes tels que des retards de transmission lors de la mise en œuvre d'appels vidéo en temps réel. Et UDP

Comment utiliser Workerman pour créer un système d'équilibrage de charge à haute disponibilité Comment utiliser Workerman pour créer un système d'équilibrage de charge à haute disponibilité Nov 07, 2023 pm 01:16 PM

Comment utiliser Workerman pour créer un système d'équilibrage de charge à haute disponibilité nécessite des exemples de code spécifiques. Dans le domaine de la technologie moderne, avec le développement rapide d'Internet, de plus en plus de sites Web et d'applications doivent gérer un grand nombre de requêtes simultanées. Afin d’atteindre une haute disponibilité et des performances élevées, le système d’équilibrage de charge est devenu l’un des composants essentiels. Cet article explique comment utiliser le framework open source PHP Workerman pour créer un système d'équilibrage de charge à haute disponibilité et fournit des exemples de code spécifiques. 1. Introduction à Workerman Worke

Comment implémenter la fonction de minuterie dans le document Workerman Comment implémenter la fonction de minuterie dans le document Workerman Nov 08, 2023 pm 05:06 PM

Comment implémenter la fonction timer dans le document Workerman Workerman est un puissant framework de communication réseau asynchrone PHP qui fournit une multitude de fonctions, y compris la fonction timer. Utilisez des minuteries pour exécuter du code dans des intervalles de temps spécifiés, ce qui est très approprié pour les scénarios d'application tels que les tâches planifiées et les interrogations. Ensuite, je présenterai en détail comment implémenter la fonction de minuterie dans Workerman et fournirai des exemples de code spécifiques. Étape 1 : Installer Workerman Tout d’abord, nous devons installer Worker

Comment implémenter la fonction de proxy inverse dans le document Workerman Comment implémenter la fonction de proxy inverse dans le document Workerman Nov 08, 2023 pm 03:46 PM

La façon d'implémenter la fonction de proxy inverse dans le document Workerman nécessite des exemples de code spécifiques.Introduction : Workerman est un cadre de communication réseau multi-processus PHP hautes performances qui offre des fonctions riches et des performances puissantes et est largement utilisé dans la communication Web en temps réel et à long terme. connexions. Parmi eux, Workerman prend également en charge la fonction de proxy inverse, qui peut réaliser l'équilibrage de charge et la mise en cache des ressources statiques lorsque le serveur fournit des services externes. Cet article explique comment utiliser Workerman pour implémenter la fonction de proxy inverse.

Comment implémenter la communication TCP/UDP dans la documentation Workerman Comment implémenter la communication TCP/UDP dans la documentation Workerman Nov 08, 2023 am 09:17 AM

La façon d'implémenter la communication TCP/UDP dans le document Workerman nécessite des exemples de code spécifiques. Workerman est un framework PHP asynchrone piloté par les événements hautes performances qui est largement utilisé pour implémenter la communication TCP et UDP. Cet article explique comment utiliser Workerman pour implémenter la communication basée sur TCP et UDP et fournit des exemples de code correspondants. 1. Créez un serveur TCP pour la communication TCP. Il est très simple de créer un serveur TCP à l'aide de Workerman. Il vous suffit d'écrire le code suivant : &lt;?ph.

See all articles