環(huán)境搭建及擴(kuò)展安裝

2018-02-24 16:13 更新

環(huán)境說明:
系統(tǒng):Ubuntu14.04 (安裝教程包括CentOS6.5)
PHP版本:PHP-5.5.10
swoole版本:1.7.6-stable

PHP安裝

要用swoole,首先需要有PHP環(huán)境。由于swoole的某些特性,最好是能夠從源碼編譯安裝PHP,這樣在使用過程中可以避免很多不必要的錯(cuò)誤。 PHP下載地址:http://php.net/?在這里挑選你想用的版本即可。下載源碼包后,解壓至本地任意目錄(保證讀寫權(quán)限),留待使用。 安裝PHP前,需要安裝編譯環(huán)境和PHP的相關(guān)依賴。下面是相關(guān)命令: Ubuntu環(huán)境下:

sudo apt-get install build-essential gcc g++ autoconf libiconv-hook-dev libmcrypt-dev libxml2-dev libmysqlclient-dev libcurl4-openssl-dev libjpeg8-dev libpng12-dev libfreetype6-dev

CentOS環(huán)境下:

yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers gd gd2 gd-devel gd2-devel perl-CPAN pcre-devel

(注:以上命令是我在實(shí)際使用中驗(yàn)證過的可以使用的,可能會(huì)和其他教程提供的命令不同) 當(dāng)上述命令執(zhí)行后,即可開始安裝PHP。命令如下:

cd php-5.5.10/
./configure --prefix=/usr/local/php --with-config-file-path=/etc/php --enable-fpm --enable-pcntl --enable-mysqlnd --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem  --enable-sysvshm --enable-shmop --enable-zip --enable-ftp --enable-soap --enable-xml --enable-mbstring --disable-rpath --disable-debug --disable-fileinfo --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-pcre-regex --with-iconv --with-zlib --with-mcrypt --with-gd --with-openssl --with-mhash --with-xmlrpc --with-curl --with-imap-ssl
sudo make
sudo make install
sudo cp php.ini-development /etc/php/

至此,PHP已經(jīng)成功安裝,但是此時(shí)在終端里是無法直接通過php --version查看php版本的還需要將PHP的可執(zhí)行目錄添加到環(huán)境變量中。 使用Vim/Sublime打開~/.bashrc,在末尾添加如下內(nèi)容:

export PATH=/usr/local/php/bin:$PATH
export PATH=/usr/local/php/sbin:$PATH

保存后,終端輸入命令:

source ~/.bashrc

此時(shí)即可通過php --version查看php版本,看到如下內(nèi)容:

PHP 5.5.10 (cli) (built: Apr 26 2014 09:46:14) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies

即說明安裝成功。

Swoole安裝

安裝完P(guān)HP后,即可安裝swoole擴(kuò)展。 swoole擴(kuò)展下載地址:https://github.com/swoole/swoole-src/releases?盡量選擇stable版本,alpha版本最好僅用于實(shí)驗(yàn)新特性。 解壓源碼至任意目錄,執(zhí)行如下命令:

cd swoole-src-swoole-1.7.6-stable/
phpize
./configure --enable-async-mysql
sudo make
sudo make install

(注:swoole的./configure有很多額外參數(shù),可以通過./configure --help命令查看,這里僅開啟其中async-mysql項(xiàng),其他均選擇默認(rèn)項(xiàng)) 安裝完成后,進(jìn)入/etc/php目錄下,打開php.ini文件,在其中加上如下一句:

extension=swoole.so

隨后在終端中輸入命令

php -m

查看擴(kuò)展安裝情況。如果在列出的擴(kuò)展中看到了swoole,則說明安裝成功。

基本實(shí)例

下面貼一個(gè)基本的基于swoole的echo服務(wù)器

// Server
class Server
{
    private $serv;

    public function __construct() {
        $this->serv = new swoole_server("0.0.0.0", 9501);
        $this->serv->set(array(
            'worker_num' => 8,
            'daemonize' => false,
            'max_request' => 10000,
            'dispatch_mode' => 2,
            'debug_mode'=> 1
        ));

        $this->serv->on('Start', array($this, 'onStart'));
        $this->serv->on('Connect', array($this, 'onConnect'));
        $this->serv->on('Receive', array($this, 'onReceive'));
        $this->serv->on('Close', array($this, 'onClose'));

        $this->serv->start();
    }

    public function onStart( $serv ) {
        echo "Start\n";
    }

    public function onConnect( $serv, $fd, $from_id ) {
        $serv->send( $fd, "Hello {$fd}!" );
    }

    public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {
        echo "Get Message From Client {$fd}:{$data}\n";
    }

    public function onClose( $serv, $fd, $from_id ) {
        echo "Client {$fd} close connection\n";
    }
}
// 啟動(dòng)服務(wù)器
$server = new Server();

從代碼中可以看出,創(chuàng)建一個(gè)swoole_server基本分三步:

  1. 通過構(gòu)造函數(shù)創(chuàng)建swoole_server對(duì)象
  2. 調(diào)用set函數(shù)設(shè)置swoole_server的相關(guān)配置選項(xiàng)
  3. 調(diào)用on函數(shù)設(shè)置相關(guān)回調(diào)函數(shù) 關(guān)于set配置選項(xiàng)以及on回調(diào)函數(shù)的具體說明,請(qǐng)參考我整理的swoole文檔(?配置選項(xiàng))

這里只給出簡(jiǎn)單介紹。onStart回調(diào)在server運(yùn)行前被調(diào)用,onConnect在有新客戶端連接過來時(shí)被調(diào)用,onReceive函數(shù)在有數(shù)據(jù)發(fā)送到server時(shí)被調(diào)用,onClose在有客戶端斷開連接時(shí)被調(diào)用。 這里就可以大概看出如何使用swoole:在onConnect處監(jiān)聽新的連接;在onReceive處接收數(shù)據(jù)并處理,然后可以調(diào)用send函數(shù)將處理結(jié)果發(fā)送出去;在onClose處處理客戶端下線的事件。

下面貼出客戶端的代碼:

<?php
class Client
{
    private $client;

    public function __construct() {
        $this->client = new swoole_client(SWOOLE_SOCK_TCP);
    }

    public function connect() {
        if( !$this->client->connect("127.0.0.1", 9501 , 1) ) {
            echo "Error: {$fp->errMsg}[{$fp->errCode}]\n";
        }
        $message = $this->client->recv();
        echo "Get Message From Server:{$message}\n";

        fwrite(STDOUT, "請(qǐng)輸入消息:");  
        $msg = trim(fgets(STDIN));
        $this->client->send( $msg );
    }
}

$client = new Client();
$client->connect();

這里,通過swoole_client創(chuàng)建一個(gè)基于TCP的客戶端實(shí)例,并調(diào)用connect函數(shù)向指定的IP及端口發(fā)起連接請(qǐng)求。隨后即可通過recv()和send()兩個(gè)函數(shù)來接收和發(fā)送請(qǐng)求。需要注意的是,這里我使用了默認(rèn)的同步阻塞客戶端,因此recv和send操作都會(huì)產(chǎn)生網(wǎng)絡(luò)阻塞。

(以上兩段代碼均以上傳git,地址:https://github.com/LinkedDestiny/swoole-doc/tree/master/src/01

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)