swoole新手教程01-環境搭建及擴展安裝

寫在前面的廢話

《swoole源代碼分析》已經寫了13章,整個swoole的核心架構基本都分析的差點兒相同了。因而內心一直以來想整理swoole的文檔並寫一份教程的想法就再度浮了出來。php

實話說,我接觸swoole乃至接觸PHP都僅有9個月的時間。而自7月份以來一直在公司作Android開發。也有沒有了使用swoole的機會。因此,現在我僅僅能寫出一份入門級教程,幫助剛剛接觸swoole的人理解和使用swoole寫一些簡單的樣例。從而初步掌握-swoole的使用方法。mysql


Git地址:https://github.com/LinkedDestiny/swoole-docc++

第一章 環境搭建及擴展安裝

環境說明: 系統:Ubuntu14.04 (安裝教程包含CentOS6.5) git

PHP版本號:PHP-5.5.10 github

swoole版本號:1.7.6-stablesql

PHP安裝

要用swoole。首先需要有PHP環境。由於swoole的某些特性,最好是能夠從源代碼編譯安裝PHP。這樣在使用過程當中能夠避免很是多沒必要要的錯誤。shell

 PHP下載地址:http://php.net/ bash

在這裏挑選你想用的版本號就能夠。下載源代碼包後,解壓至本地隨意文件夾(保證讀寫權限),留待使用。 安裝PHP前。需要安裝編譯環境和PHP的相關依賴。如下是相關命令: 服務器

Ubuntu環境下:swoole

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環境下:

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

(注:以上命令是我在實際使用中驗證過的可以使用的,可能會和其它教程提供的命令不一樣) 當上述命令運行後,就能夠開始安裝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已經安裝成功。但是此時在終端裏是沒法直接經過php --version查看php版本號的。

還需要將PHP的可運行文件夾加入到環境變量中。 使用Vim/Sublime打開~/.bashrc。在末尾加入例如如下內容:

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

保存後。終端輸入命令:

source ~/.bashrc

此時就能夠經過php --version查看php版本號。看到例如如下內容:

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安裝

安裝完PHP後。就能夠安裝swoole擴展。

swoole擴展下載地址:https://github.com/swoole/swoole-src/releases 儘可能選擇stable版本號,alpha版本號最好僅用於實驗新特性。

解壓源代碼至隨意文件夾。運行例如如下命令:

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

(注:swoole的./configure有很是多額外參數,可以經過./configure --help命令查看,這裏僅開啓當中async-mysql項。其它均選擇默認項) 安裝完畢後,進入/etc/php文件夾下,打開php.ini文件,在當中加上例如如下一句:

extension=swoole.so

隨後在終端中輸入命令

php -m

查看擴展安裝狀況。假設在列出的擴展中看到了swoole,則說明成功安裝。

基本實例

如下貼一個主要的基於swoole的echoserver

// 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";
    }
}
// 啓動服務器
$server = new Server();

從代碼中可以看出,建立一個swoole_server基本分三步:

1. 經過構造函數建立swoole_server對象 

2. 調用set函數設置swoole_server的相關配置選項 

3. 調用on函數設置相關回調函數 關於set配置選項以及on回調函數的詳細說明,請參考我整理的swoole文檔(臨時尚未……小夥伴們耐心等兩天……屆時我會給出連接噠)

這裏僅僅給出簡介。onStart回調在server執行前被調用,onConnect在有新client鏈接過來時被調用,onReceive函數在有數據發送到server時被調用。onClose在有client斷開鏈接時被調用。

 

這裏就可以大概看出怎樣使用swoole:在onConnect處監聽新的鏈接;在onReceive處接收數據並處理。而後可以調用send函數將處理結果發送出去;在onClose到處理client下線的事件。

如下貼出client的代碼:

<?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, "請輸入消息:");  
        $msg = trim(fgets(STDIN));
        $this->client->send( $msg );
    }
}

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

這裏。經過swoole_client建立一個基於TCP的client實例。並調用connect函數向指定的IP及port發起鏈接請求。

隨後就能夠經過recv()和send()兩個函數來接收和發送請求。

需要注意的是。這裏我使用了默認的同步堵塞client,所以recv和send操做都會產生網絡堵塞。

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

下章預告:swoole的task使用以及實例:簡單聊天室

相關文章
相關標籤/搜索