Home  >  Article  >  Backend Development  >  Swoole high performance php framework

Swoole high performance php framework

不言
不言Original
2018-04-24 16:35:402576browse

This article mainly introduces the Swoole high-performance PHP framework, which has certain reference value. Now I share it with everyone. Friends in need can refer to it.

I have learned nodejs before, and its performance is powerful.

This year’s goal is to go deep into workman and use swool. I used workman to handle the chat system before, and the work needed to be run on a window. Therefore, in terms of performance, the advantages of workman are not fully utilized.

In this month, just as the project needed, I developed the interface of the customer service chat system of the WeChat mini program mall using swoole.

Chat between customers and customer service through the official interface provided by WeChat.

Swoole high performance php framework

Using swoole can easily handle websocket and online chat.

Prerequisites for sending messages to specified users

When a client connects to the socket, the system will allocate a fd, which identifies an individual client.
When logging in, the customer service end can send the user's information to swoole, including the customer service ID.

In order to send messages to specified customers or groups, store the customer service ID and corresponding fd in redis. When you open the socket and send it to a customer service, you only need to read the corresponding key of the redis customer service to send it to the specified user.

Asynchronous

Although the current consultation volume is not large, in order to extend the life of the code, task asynchronous is added when the customer service sends messages and receives messages. When the volume of inquiries is large, swoole can handle it with ease.

Asynchronous storage log

Chatting is not like writing an article. There may be tens of thousands of inquiries per second, so in order to make the system smooth and perform unnecessary time-consuming operations, swoole provides asynchronous reading and writing to help us read and write logs.

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

Basic asynchronous template

Object-oriented class

<?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();

The above is the detailed content of Swoole high performance php framework. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn