Maison  >  Article  >  cadre php  >  Ce que swoole2.0 peut faire

Ce que swoole2.0 peut faire

(*-*)浩
(*-*)浩original
2019-12-12 13:19:241932parcourir

Ce que swoole2.0 peut faire

La version officielle de Swoole 2.0 est sortie. La plus grande mise à jour de la version 2.0 est l'ajout de la prise en charge des coroutines. La version officielle prend en charge PHP5 et PHP7.

Basé sur la coroutine Swoole2.0, les développeurs PHP peuvent écrire du code de manière synchrone, et la couche inférieure planifie automatiquement la coroutine et la transforme en IO asynchrone. Résolvez le problème des rappels imbriqués dans la programmation asynchrone traditionnelle.                                                                                                                                                                                                                  Il n'est pas nécessaire de modifier le code pour ajouter des mots-clés supplémentaires.

Par rapport à goroutine dans le langage Go, la coroutine Swoole est intégrée. Il n'est pas nécessaire d'ajouter le mot-clé go au code de la couche application pour démarrer la coroutine. Il vous suffit d'utiliser le client coroutine encapsulé. est plus simple à utiliser. De plus, le composant IO de la coroutine Swoole dispose d'un mécanisme de délai d'attente intégré au niveau de la couche inférieure, il n'est donc pas nécessaire d'utiliser une sélection/chan/minuterie complexe pour implémenter le délai d'attente du client.

Actuellement, les composants clients coroutine intégrés au bas de Swoole incluent : udpclient, tcpclient, httpclient, redisclient et mysqlclient, qui couvrent essentiellement plusieurs protocoles de communication couramment utilisés par les développeurs. Les composants Coroutine ne peuvent être utilisés que dans les fonctions de rappel onConnect, onRequest, onReceive et onMessage du serveur.

Exemple d'utilisation

$server = new Swoole\Http\Server('127.0.0.1', 9501);

/*
    触发on request事件时,SWOOLE会开辟一个协程栈,对协程栈进行初始化
 */
$server->on('Request', function ($request, $response) {
    $tcp_cli = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP);
    /**
        client在调用connect函数后,SWOOLE会将PHP上下文信息保存到当前栈内
        然后将协程挂起,待确认连接成功后,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行PHP代码
     */
    if ($tcp_cli->connect('127.0.0.1', 9906) === false) {
        $response->end("connect server failed.");
        return;
    }
    $tcp_cli->send('test for the coro');
    /*
        client在调用recv函数后,SWOOLE会将PHP上下文信息保存到当前栈内
        然后将协程挂起待后端svr回包,触发epoll事件,然后协程切换
        恢复PHP上下文信息,返回结果,继续执行PHP代码
        如果后端在设定的超时时间内,未能回包,返回false
        client的errCode定为110
     */
    $ret = $tcp_cli->recv(100);
    $tcp_cli->close();
    if ($ret) {
        $response->end(" swoole response is ok");
    } else {
        $response->end(" recv failed error : {$tcp_cli->errCode}");
    }
});

$server->start();

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