Swoole PHP高效能程式設計

航空母艦發表於2016-02-26
其實超出瀏覽器,PHP仍有用武之地,Linux上PHP通過pcntl、posix、sysvshm、sysvmsg、libevent、 swoole、proctitle等PECL擴充套件支援,用純PHP就可以編寫不依賴Nginx/Apache的高效能Socket應用伺服器(獨立控制程式,以守護程式執行)

Phalcon 是開源、全功能棧、使用 C 擴充套件編寫、針對高效能優化的PHP5框架http://myleftstudio.com/

<?php

class ControllerBase extends Phalcon\Mvc\Controller
{
    protected function forward($uri)
    {
        //TODO 考慮這裡是否可以接收url中的引數
        $uriParts = explode('/', $uri);
        return $this->dispatcher->forward(
            array(
                'controller' => $uriParts[0],
                'action' => $uriParts[1]
            )
        );
    }

    protected function redirect($uri = '', $param = array())
    {
        $url = new Phalcon\Mvc\Url();
        $uri .= !empty($param) ? '/?' . http_build_query($param) : '';
        header("location:" . $url->get($uri));
        die;
    }

    /**
     * 獲取當前controller下的方法 資料
     * @return string
     */
    public function getActionInfo()
    {
        $action = '/' . $this->dispatcher->getControllerName() . '/' . $this->dispatcher->getActionName();
        return $this->session->get($action);
    }
}

 

Swoole PHP語言的非同步、並行、高效能網路通訊框架, 使用純C語言編寫,提供了PHP語言的非同步多執行緒伺服器,非同步TCP/UDP網路客戶端,非同步MySQL,資料庫連線池,AsyncTask,訊息佇列, 毫秒定時器,非同步檔案讀寫,非同步DNS查詢。Swoole可以廣泛應用於網際網路、行動通訊、企業軟體、雲端計算、網路遊戲、物聯網、車聯網、智慧家居等領域。 使用PHP+Swoole作為網路通訊框架,可以使企業IT研發團隊的效率大大提升,更加專注於開發創新產品。

下載原始碼包後,在終端進入原始碼目錄,執行下面的命令進行編譯和安裝

cd swoole
phpize
./configure
make 
sudo make install

安裝成功

編譯安裝成功後,修改php.ini加入

extension=swoole.so
通過php -mphpinfo()來檢視是否成功載入了swoole,

如果沒有,可能是php.ini的路徑不對,可以使用php -i |grep php.ini來定位到php.ini的絕對路徑。

TCP Server

<?php //server.php
$serv = new swoole_server("127.0.0.1", 9501);
$serv->set(array(
    'worker_num' => 8,   //工作程式數量
    'daemonize' => true, //是否作為守護程式
));
$serv->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();

TCP Client 

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
//設定事件回撥函式
$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});
$client->on("receive", function($cli, $data){
    echo "Received: ".$data."\n";
});
$client->on("error", function($cli){
    echo "Connect failed\n";
});
$client->on("close", function($cli){
    echo "Connection close\n";
});
//發起網路連線
$client->connect('127.0.0.1', 9501, 0.5);

php命令列開啟監聽

php server.php  

 客戶端訪問

瀏覽器執行程式碼

<?php
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC); //同步阻塞
$client->connect('127.0.0.1', 9503, 0.5);////發起網路連線
$client->send("hello world\n");
$data = $client->recv(1024);
echo $data;
unset($client);

php+swoole目前的主要競爭物件是node.js,兩者的使用場景差不多。php在web領域的龐大使用量,如果你的現有專案也是用php構建的,用swoole寫後端服務的時候可以複用大量的現有模組,這對企業開發的一致性是很重要的,理論上講只需要維護一套基礎就行了

李丹陽  https://github.com/LinkedDestiny/swoole-doc

phpstorm-swoole-ide-helper 程式碼自動補全http://hudeyong926.iteye.com/admin/blogs/2285968

相關文章