Maison > cadre php > Swoole > Comment utiliser PHP swole

Comment utiliser PHP swole

(*-*)浩
Libérer: 2019-12-16 09:08:15
original
3466 Les gens l'ont consulté

Comment utiliser PHP swole

PHP est utilisé dans le projet, mais en raison de la tâche longue et fastidieuse, une fois le front-end soumis, le serveur doit répondre de manière asynchrone.

Il existe de nombreuses solutions pour les serveurs asynchrones, notamment MQ, fsocket, Swoole, etc. (Apprentissage recommandé : tutoriel vidéo swoole )

Swoole est écrit en langage C pur et fournit un serveur multithread asynchrone en langage PHP, client réseau TCP/UDP asynchrone, MySQL asynchrone, asynchrone Redis, pool de connexions à la base de données, AsyncTask, file d'attente de messages, minuterie en millisecondes, lecture et écriture de fichiers asynchrones, requête DNS asynchrone. Swoole a un serveur/client Http/WebSocket intégré et un serveur Http2.0.

Le plus important est qu'il supporte parfaitement le langage PHP. J'ai donc utilisé Swoole pour créer un serveur asynchrone afin de fournir une série de tâches telles que des réponses asynchrones, des tâches push et planifiées.

Swoole est écrit en langage C et est compilé et installé.

Les dépendances d'installation sont :

php-5.3.10 或更高版本
gcc-4.4 或更高版本
Copier après la connexion
make
autoconf
pcre (centos系统可以执行命令:yum install pcre-devel)
Copier après la connexion

Méthode d'installation :

phpize #如果命令不存在 请在前面加上php的实际路径
./configure
make 
sudo make install
Copier après la connexion

Une fois la compilation terminée, vous devez installer php Ajouter l'extension

extension=swoole.so
Copier après la connexion

serveur

class Server{
    private $serv;
    public function __construct() {
        $this->serv = new swoole_server("0.0.0.0", 9501);
        $this->serv->set(array(
            //'worker_num' => 1,  //一般设置为服务器CPU数的1-4倍
            'daemonize' => 1,  //以守护进程执行
            'max_request' => 10000,
            'task_worker_num' => 1,  //task进程的数量
            "task_ipc_mode " => 3 ,  //使用消息队列通信,并设置为争抢模式
            'open_length_check'    => true,
            'dispatch_mode'        => 1,
            'package_length_type'  => 'N',  //这个很关键,定位包头的
            'package_length_offset' => 0,      //第N个字节是包长度的值
            'package_body_offset'  => 4,      //第几个字节开始计算长度
            'package_max_length'    => 2000000,  //协议最大长度
            "log_file" => "/tmp/swoole_test.log"  //日志
        ));
        $this->serv->on('Receive', array($this, 'onReceive'));
        $this->serv->on('Task', array($this, 'onTask'));
        $this->serv->on('Finish', array($this, 'onFinish'));
        $this->serv->start();
    }
    public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {
        //放入任务队列,开始执行
        $task_id = $serv->task( $data );
    }
    public function onTask($serv,$task_id,$from_id, $data) {
      //做一些事情
    }
Copier après la connexion

client

class Client{
    private $client, $ip, $port, $params;
    public function __construct($ip, $port, $params)
    {
        $this->ip = $ip;
        $this->port = $port;
        $this->params = $params;
        $this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
        $this->client->set(array(
            'open_length_check'    => true,
            'package_length_type'  => 'N',
            'package_length_offset' => 0,      //第N个字节是包长度的值
            'package_body_offset'  => 4,      //第几个字节开始计算长度
            'package_max_length'    => 2000000,  //协议最大长度
        ));
        //设置事件回调函数
        $this->client->on('Connect', array($this, 'onConnect'));
        $this->client->on('Receive', array($this, 'onReceive'));
        $this->client->on('Close', array($this, 'onClose'));
        $this->client->on('Error', array($this, 'onError'));
        //发起网络连接
        $this->client->connect($ip, $port, 3);
    }
    public function onReceive( $cli, $data ) {
        echo "Received: " . $data . "\n";
    }
    public function onConnect($cli) {
        $data = pack('N', strlen($data)) . $data;
        $cli->send($data);
        $cli->close();
    }
    public function onClose( $cli)
    {
        echo "Connection close\n";
    }
    public function onError()
    {
        echo "Connect failed\n";
    }
}
Copier après la connexion
dans .ini

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal