1. 程式人生 > >【swoole】php5.6 swoole(demo)小測試

【swoole】php5.6 swoole(demo)小測試

swoole 異步通信 swoole異步任務隊列

swoole:
網上看到的解釋
“實現實時異步任務隊列;
PHP的異步、並行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。”
相關文檔地址:https://wiki.swoole.com/wiki/page/6.html
剛接觸swoole的時候是懵的狀態,然後看demo自己試著調試了一下:

<?php
//server.php  服務端
$serv = new swoole_server("0.0.0.0", 4001);//本地的 沒被占用的端口

//設置異步任務的工作進程數量
$serv->set(array(‘task_worker_num‘ => 4));//一開始設置了4個,然而我測試的時候並沒有用這麽多

//接收客戶端發來的數據
$serv->on(‘receive‘, function($serv, $fd, $from_id, $data) {
        //投遞異步任務
        $serv->send($fd, ‘Swoole: ‘.$data.‘測試數據‘);//發送回客戶端
        $task_id = $serv->task($data);//繼續向服務端發送(執行異步任務)
        echo "receive" . $task_id;//當前的作業號
});

//處理異步任務
$serv->on(‘task‘, function ($serv, $task_id, $from_id, $data) {
        sendScore($data);//自己寫的方法 處理數據
        //返回任務執行的結果
        $serv->finish($data);
});

//處理異步任務的結果
$serv->on(‘finish‘, function ($serv, $task_id, $data) {
        echo "finish".$task_id;//任務結束標誌
});
$serv->start();

//自己寫的測試方法
function sendScore($data){
        //獲取到$data
        //$arr = json_decode($data,true);
        //判斷數據是否異常
        echo ‘判斷數據是否異常(中間層的異步執行)‘;
        return true;
}

<?php
//client.php 客戶端
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect(‘0.0.0.0‘, 4001, -1))
{
        exit("connect failed. Error: {$client->errCode}\n");
}
$client->send(‘hello lin‘);//客戶端發送數據給服務端
echo $client->recv();//接收服務端傳回來的
$client->close();

先執行server.php,然後執行client.php
當server開始跑的時候,client發送消息,server開始處理,client接收服務端的返回值,服務端記錄輸出接收和完成的任務。
技術分享圖片
技術分享圖片

這才是剛剛開始......下面打算做一個聊天室之類的練手,如果上面有哪裏寫的不對的.....以後回來再更新~

【swoole】php5.6 swoole(demo)小測試