什麼是swoole
swoole是PHP的異步、並行、高性能網絡通訊引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫鏈接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。
Swoole能夠普遍應用於互聯網、移動通訊、企業軟件、雲計算、網絡遊戲、物聯網(IOT)、車聯網、智能家居等領域。 使用PHP+Swoole做爲網絡通訊框架,可使企業IT研發團隊的效率大大提高,更加專一於開發創新產品。隨着咱們php
咱們爲何用swoolehtml
用戶打開了咱們的網站。他要作的就是勾選須要發郵件的代理商列表,而後把結算郵件發出去。
假如咱們須要發1封郵件,咱們寫個函數執行便可。考慮到網絡可能會稍微有點延遲,可是是能夠接受的,用戶會乖乖等你的網頁發完郵件了再關閉網頁。
假如咱們要發佈10封郵件,用一個for循環,循環10遍執行發郵件操做。這時候,也許10倍的網絡延遲會讓用戶稍微有點不耐煩,但勉強能夠等吧。
假如要發100封郵件,for循環100遍,用戶直接揭竿而起,什麼破網站!
但實際上,咱們極可能有超過1萬的郵件。怎麼處理這個延遲的問題?
答案就是用異步。把「發郵件」這個操做封裝,而後後臺異步地執行1萬遍。這樣的話,用戶提交網頁後,他所等待的時間只是「把發郵件任務請求推送進隊列裏」的時間。而咱們的後臺服務將在用戶看不見的地方跑。而swoole就爲咱們實現了異步隊列處理及併發等問題。linux
如何使用nginx
一、安裝swoole
有兩種安裝方式,一種是先下載安裝包,傳到服務器(記住必定是linux服務器)上,而後解壓,而後先cd到服務器的安裝包的位置,而後執行git
phpize ./configure make sudo make install
系統就會自動安裝,若是提示phpize不存在的話,就須要安裝一下phpize.
另外一種方式直接執行github
pecl install swoole
用這種方式能夠自動下載安裝。
我採起的是第二種方式噢。
安裝完成,須要更改php.ini的配置,將數據庫
extension=swoole.so
放在這個配置中,而後重啓nginx。
完成之後執行瀏覽器
php -m
查看是否有swoole。有swoole說明安裝成功。
2.啓動server
以前看文檔我一直覺得swoole是個框架,須要咱們配置而後設置端口訪問,其實不是,swoole是php的擴展,咱們只須要在咱們的項目中增長server.php,或者其餘的名字,裏面的代碼簡單點能夠按照文檔上來寫,以下:bash
//建立Server對象,監聽 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); //監聽鏈接進入事件 $serv->on('connect', function ($serv, $fd) { echo "Client: Connect.\n"; }); //監聽數據發送事件 $serv->on('receive', function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); //監聽鏈接關閉事件 $serv->on('close', function ($serv, $fd) { echo "Client: Close.\n"; }); //啓動服務器 $serv->start();
這裏就建立了一個TCP服務器,監聽本機9501端口,你也能夠改爲其餘的端口號,只要你的服務器能夠支持這個端口。
服務器端的server必須運行起來咱們才能使用swoole,異步執行。如何運行呢?咱們cd到你的項目下server.php 所在的文件夾,而後執行服務器
php server.php
如何測試成功呢?咱們能夠關掉這個客戶端,從新打開鏈接服務器,而後執行
telnet 127.0.0.1 9501 hello Server: hello
若是是這樣子說明成功了。
須要注意的是咱們若是修改了server.php,必須斷掉以前,而後從新打開。
我這邊寫了一個腳原本斷掉以前的,起名stop.sh
#! /bin/bash ps -eaf |grep "server.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9
這須要放在和server.php同一個文件夾。
咱們須要cd到這個文件夾,執行sh stop.sh
三、client
這個是能夠在瀏覽器上執行的,咱們見一個client.php,代碼以下:
$client = new swoole_client(SWOOLE_SOCK_TCP); //鏈接到服務器 if (!$client->connect('127.0.0.1', 9501, 0.5)) { die("connect failed."); } //向服務器發送數據 if (!$client->send("hello world")) { die("send failed."); } //從服務器接收數據 $data = $client->recv(); if (!$data) { die("recv failed."); } echo $data; //關閉鏈接 $client->close();
建立一個TCP的同步客戶端,此客戶端能夠用於鏈接到咱們server服務器。向服務器端發送一個hello world字符串,服務器會返回一個 Server: hello world字符串。
以上是swoole簡單的安裝和連同。
yii2集成swoole
有須要的朋友能夠去yii2-swoole這個地址下載,yii2集成swoole的代碼。
參考資料:
關於異步任務隊列