Heim >PHP-Framework >Swoole >So verwenden Sie PHP swoole

So verwenden Sie PHP swoole

(*-*)浩
(*-*)浩Original
2019-12-16 09:08:153527Durchsuche

So verwenden Sie PHP swoole

PHP wird im Projekt verwendet, aber aufgrund der langen und zeitaufwändigen Aufgabe muss der Server nach der Übermittlung des Front-Ends asynchron reagieren.

Es gibt viele Lösungen für asynchrone Server, einschließlich MQ, fsocket, Swoole usw. (Empfohlenes Lernen: Swoole-Video-Tutorial )

Swoole ist in reiner C-Sprache geschrieben und bietet einen asynchronen Multithread-Server in PHP-Sprache, einen asynchronen TCP/UDP-Netzwerk-Client, asynchrones MySQL und asynchrones Redis, Datenbankverbindungspool, AsyncTask, Nachrichtenwarteschlange, Millisekunden-Timer, asynchrones Lesen und Schreiben von Dateien, asynchrone DNS-Abfrage. Swoole verfügt über einen integrierten HTTP/WebSocket-Server/Client und einen HTTP2.0-Server.

Das Wichtigste ist, dass es die PHP-Sprache perfekt unterstützt. Deshalb habe ich Swoole verwendet, um einen asynchronen Server zu erstellen, der eine Reihe von Aufgaben wie asynchrone Antworten, Push und geplante Aufgaben bereitstellt.

Swoole ist in der Sprache C geschrieben und wird kompiliert und installiert.

Die Installationsabhängigkeiten sind:

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

Installationsmethode:

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

Nach Abschluss der Kompilierung benötigen Sie Um PHP zu installieren, fügen Sie die Erweiterung

extension=swoole.so

Server

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) {
      //做一些事情
    }

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";
    }
}
in .ini hinzu

Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP swoole. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn