Maison  >  Article  >  développement back-end  >  Framework PHP haute performance Swoole

Framework PHP haute performance Swoole

不言
不言original
2018-04-24 16:35:402584parcourir

Cet article présente principalement le framework PHP haute performance Swoole, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

J'ai déjà appris nodejs, qui est puissant. performance.

L'objectif de cette année est d'approfondir l'ouvrage et d'utiliser la laine. J'utilisais auparavant Workman pour gérer le système de discussion, et le travail devait être exécuté sur une fenêtre. Par conséquent, en termes de performances, les avantages du travailleur ne sont pas pleinement exploités.

Ce mois-ci, tout comme le projet l'exigeait, nous avons utilisé swoole pour développer l'interface du système de chat du service client du mini centre commercial WeChat.

Discutez entre les clients et le service client via l'interface officielle fournie par WeChat.

Framework PHP haute performance Swoole

L'utilisation de swoole peut facilement gérer Websocket et discuter en ligne.

Conditions préalables pour l'envoi de messages à des utilisateurs spécifiés

Lorsqu'un client se connecte au socket, le système attribuera un fd, qui identifie le client individuel.
Lors de la connexion, le service client peut envoyer les informations de l'utilisateur à swoole, y compris l'identifiant du service client.

Afin d'envoyer des messages à des clients ou à des groupes spécifiés, stockez l'ID du service client et le FD correspondant dans Redis. Lorsque vous ouvrez le socket et l'envoyez à un service client, il vous suffit de lire la clé correspondante du service client redis pour l'envoyer à l'utilisateur spécifié.

Asynchrone

Bien que le volume actuel de demandes ne soit pas important, afin de garantir que le code puisse être utilisé plus longtemps, une tâche asynchrone est ajoutée lorsque le service client envoie et reçoit des messages. Lorsque le volume de demandes est important, swoole peut le gérer facilement.

Journal de stockage asynchrone

Chatter n'est pas comme écrire un article. Il peut y avoir des dizaines de milliers de requêtes par seconde, donc afin de rendre le système fluide, swoole fournit une lecture et une écriture asynchrones pour nous aider à lire et à écrire des journaux pour les opérations fastidieuses inutiles.

function log_text($data){
    swoole_async_writefile(__DIR__ . '/log.txt', $data.$data."\n\n", function($filename) {
    }, FILE_APPEND);
}

Modèle asynchrone de base

Classe orientée objet

<?phpclass WebsocketTest {
    public $server;    public function __construct() {
        $this->server = new swoole_websocket_server("0.0.0.0", 7272);        
        $this->server->on(&#39;open&#39;,[$this,&#39;open&#39;]);        
        $this->server->on(&#39;message&#39;, [$this,&#39;message&#39;]);        
        $this->server->on(&#39;close&#39;, [$this,&#39;close&#39;]);        
        $this->server->on(&#39;request&#39;, [$this,&#39;request&#39;]);        
        $this->server->on(&#39;task&#39;,[$this,&#39;task&#39;]);        
        $this->server->on(&#39;finish&#39;,[$this,&#39;finish&#39;]);        
        $this->server->set([//            &#39;daemonize&#39;=>true,
        &#39;task_worker_num&#39;=>10,
        ]);        $this->server->start();
    }    //@异步接受数据, 发送数据
    function finish($server, $task_id,$data){
        $server->push($data[&#39;fd&#39;],$data[&#39;data&#39;]);
    }    //@异步处理数据
    function task($server, $task_id, $from_id, $data){
        //接受到数据之后处理复杂逻辑处理
        sleep(&#39;5&#39;);        
        $data[&#39;data&#39;] = &#39;服务器发送&#39;.$data[&#39;data&#39;];        
        $server->finish($data);
    }    
    function request($request, $response) {
        foreach ($this->server->connections as $fd) {            
        $this->server->push($fd, $request->get[&#39;message&#39;]);
        }
    }    function close($ser, $fd) {
        echo "client {$fd} closed\n";
    }    function message(swoole_websocket_server $server, $frame) {
        $data = [            
        &#39;fd&#39;=>$frame->fd,            &#39;data&#39;=>$frame->data,
        ];        
        $server->task($data);
    }    function open( $server, $request) {

    }
}new WebsocketTest();

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
Article précédent:Opération reste PHP (modulo)Article suivant:Opération reste PHP (modulo)