php swoole 異步處理任務例子

安裝swoole:

下載官方swoole壓縮包,解壓進入目錄

$ cd swoole                          # 進入 swoole 目錄
$ phpize              
$ ./configure --with-php-config=/usr/local/php/bin/php-config   #注意查看服務器上是否有這個路徑
$ make && make install
修改php.in文件
vi /usr/local/php/lib/php.ini
增加如下內容
extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/swoole.so"  //版本不同路徑可能不同
保存後重啓php-fpm
$ /etc/init.d/php-fpm restart
php -m 命令查看是否添加成功 成功則會看到有swoole模塊
$ php -m

服務端作爲守護進程監控任務,新建server.php:

<?php
$serv = new Swoole\Server("127.0.0.1", 9502);
$serv->set(array('task_worker_num' => 4));
$serv->on('Receive', function($serv, $fd, $from_id, $data) {
    $task_id = $serv->task("Async");
    echo "Dispath AsyncTask: id=$task_id\n";
});
$serv->on('Task', function ($serv, $task_id, $from_id, $data) {
    echo "New AsyncTask[id=$task_id]".PHP_EOL;
    $serv->finish("$data -> OK");
});
$serv->on('Finish', function ($serv, $task_id, $data) {
    echo "AsyncTask[$task_id] Finish: $data".PHP_EOL;
}); 
$serv->start();

用命令行模式打開

php server.php

新建一個client.php

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function(swoole_client $cli) {
    $cli->send("GET / HTTP/1.1\r\n\r\n");
});
$client->on("receive", function(swoole_client $cli, $data){
    echo "Receive: $data";
    $cli->send(str_repeat('A', 100)."\n");
    sleep(1);
});
$client->on("error", function(swoole_client $cli){
    echo "error\n";
});
$client->on("close", function(swoole_client $cli){
    echo "Connection close\n";
});
$client->connect('127.0.0.1', 9502);
打開一個新的窗口命令行執行 php client.php

執行完後會發現在server.php的窗口就會有信息輸出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章