學習swoole的心得(一)

什麼是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的代碼。

參考資料:
關於異步任務隊列

相關文章
相關標籤/搜索