最近聽說有個東東重新定義了"世界上最好的語言",激動一查原來大名叫swoole,
你看下它的官方定義:
php的異步、并行、高性能網絡通信引擎,使用純c語言編寫,提供了php語言的異步多線程伺服器,異步tcp/udp網絡用戶端,異步mysql,異步redis,資料庫連接配接池,asynctask,消息隊列,毫秒定時器,異步檔案讀寫,異步dns查詢。 swoole内置了http/websocket伺服器端/用戶端、http2.0伺服器端。 swoole2.0支援了類似go語言的協程,可以使用完全同步的代碼實作異步程式。php代碼無需額外增加任何關鍵詞,底層自動進行協程排程,實作異步。
你再看它有多牛:

上面的引用的都來自人民日報噢不,是官方定義,不管你信不信,反正我有點方。。。
既然它辣麼好,那oss php sdk必須支援啊(沒錯我隻是想告訴你它怎麼用,oss php sdk沒毛病,别上來就歧視俺們是殘障人士)。
廢話說那麼多,幹貨還沒見到。下面就說說oss php sdk怎麼和swoole搞基。
别看人民日報上說的swoole根正苗紅的擴充,我簡單調查下它
<code>php -m | grep swoole</code>
盡然為空、為空、為空。。。是以要自行安裝swoole,如果你和我一樣安裝了php7和pecl,你可以直接,
<code>pecl install swoole</code>
然後用php -info | grep php.ini檢視loaded configuration file(隻有它能讓php擴充幹活)具體是哪個,對于我的環境是/etc/php/7.0/cli/php.ini這個檔案,你需要
<code>vim /etc/php/7.0/cli/php.ini</code>
然後添加
<code>extension = "swoole.so"</code>
或者你可以自行編譯安裝swoole(什麼?不會?google一搜滿屏都是方法),隻要和下面一樣我們就可以繼續玩。
既然是在oss php sdk中玩轉swoole,那必須要把php sdk搞起呀。方法很簡單,方法如下:
cd aliyun-oss-php-sdk/
配置好samples/config.php #相信你肯定不是第一次用oss
php sample/swoole.php #運作我們提前放好的sample程式
curl 127.0.0.1:9503
是不是出現了 hello swoole
這就證明swoole和oss php sdk正式搞在一起了。
前面已經可以通過swoole通路oss了,但在伺服器端更普遍的做法是使用nginx作為前端代理,通過nginx反向代理伺服器通路我們起的swoole server。
具體的步驟:(已安裝nginx的自覺跳過)
tar -zxvf nginx-1.11.3.tar.gz #解壓
cd nginx-1.11.3
./configure --prefix=/usr/local/nginx #配置
需要安裝 libpcre3-dev,指令為:sudo apt-get install libpcre3-dev
sudo make install
sudo /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf #注意:-c 指定配置檔案的路徑,不加的話,nginx會自動加載預設路徑的配置檔案,可以通過 -h檢視幫助指令。
ps -ef | grep nginx #檢視nginx程序:
如果是這樣說明nginx正常工作了,下面用nginx反向代理127.0.0.1:9503,修改 /usr/local/nginx/conf/nginx.conf如下:
reload nginx使配置生效
/usr/local/nginx/sbin/nginx -s reload
vim /etc/hosts,添加 <code>127.0.0.1 www.swoole.com</code>
驗證結果,curl www.swoole.com 或者浏覽器打開這個域名,是不是還是出現 hello swoole了。
廢了這麼大功夫,如果隻出現了個hello swoole是太low了點,我不劇透你耐心往下看。
在./aliyun-oss-php-sdk目錄下有個sample.jpg檔案, 簡單上傳檔案示例代碼如下,
執行并檢視結果:
這是最簡單的oss上傳下載下傳檔案用法。
仿照上面的步驟在swoole server中調用oss php sdk,并作nginx代理後,最簡單的oss上傳下載下傳代碼變成了這樣:
php sample/swoole.php
curl www.swoole.com
是不是發現長時間沒反應,nginx報個錯誤。檢視nginx的accesslog,發現報504。打開我們在swoole中設定的swoole_http_server.log發現:
這裡有兩層問題:
問題一:從報錯發現是oss php sdk沒有找到這個example.jpg檔案,example.jpg明明是個本地檔案為什麼會找不到?
問題二:即使有這個錯誤為什麼會造成nginx報504?
如何去解這兩個問題?
對于問題一應該是swoole的坑,實際測試發現,swoole下相對路徑是從根目錄"/"算的,而不是目前目錄。是以把檔案寫成絕對路徑就ok了。
對于問題二我的了解是swoole的使用者必須去包裝它所調用接口抛出的錯誤,對本文來說當然就是oss php sdk抛出的錯誤,以讓nginx正确識别。