摘要:假如我們要發(fā)布封郵件,用一個循環(huán),循環(huán)遍執(zhí)行發(fā)郵件操作。我采取的是第二種方式噢。安裝完成,需要更改的配置,將放在這個配置中,然后重啟。向服務(wù)器端發(fā)送一個字符串,服務(wù)器會返回一個字符串。以上是簡單的安裝和連同。
什么是swoole
swoole是PHP的異步、并行、高性能網(wǎng)絡(luò)通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務(wù)器,異步TCP/UDP網(wǎng)絡(luò)客戶端,異步MySQL,異步Redis,數(shù)據(jù)庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內(nèi)置了Http/WebSocket服務(wù)器端/客戶端、Http2.0服務(wù)器端。
Swoole可以廣泛應(yīng)用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、云計算、網(wǎng)絡(luò)游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領(lǐng)域。 使用PHP+Swoole作為網(wǎng)絡(luò)通信框架,可以使企業(yè)IT研發(fā)團隊的效率大大提升,更加專注于開發(fā)創(chuàng)新產(chǎn)品。隨著我們
我們?yōu)槭裁从胹woole
用戶打開了我們的網(wǎng)站。他要做的就是勾選需要發(fā)郵件的代理商列表,然后把結(jié)算郵件發(fā)出去。
假如我們需要發(fā)1封郵件,我們寫個函數(shù)執(zhí)行即可。考慮到網(wǎng)絡(luò)可能會稍微有點延遲,但是是可以接受的,用戶會乖乖等你的網(wǎng)頁發(fā)完郵件了再關(guān)閉網(wǎng)頁。
假如我們要發(fā)布10封郵件,用一個for循環(huán),循環(huán)10遍執(zhí)行發(fā)郵件操作。這時候,也許10倍的網(wǎng)絡(luò)延遲會讓用戶稍微有點不耐煩,但勉強可以等吧。
假如要發(fā)100封郵件,for循環(huán)100遍,用戶直接揭竿而起,什么破網(wǎng)站!
但實際上,我們很可能有超過1萬的郵件。怎么處理這個延遲的問題?
答案就是用異步。把“發(fā)郵件”這個操作封裝,然后后臺異步地執(zhí)行1萬遍。這樣的話,用戶提交網(wǎng)頁后,他所等待的時間只是“把發(fā)郵件任務(wù)請求推送進隊列里”的時間。而我們的后臺服務(wù)將在用戶看不見的地方跑。而swoole就為我們實現(xiàn)了異步隊列處理及并發(fā)等問題。
如何使用
1、安裝swoole
有兩種安裝方式,一種是先下載安裝包,傳到服務(wù)器(記住一定是linux服務(wù)器)上,然后解壓,然后先cd到服務(wù)器的安裝包的位置,然后執(zhí)行
phpize ./configure make sudo make install
系統(tǒng)就會自動安裝,如果提示phpize不存在的話,就需要安裝一下phpize.
另一種方式直接執(zhí)行
pecl install swoole
用這種方式可以自動下載安裝。
我采取的是第二種方式噢。
安裝完成,需要更改php.ini的配置,將
extension=swoole.so
放在這個配置中,然后重啟nginx。
完成以后執(zhí)行
php -m
查看是否有swoole。有swoole說明安裝成功。
2.啟動server
之前看文檔我一直以為swoole是個框架,需要我們配置然后設(shè)置端口訪問,其實不是,swoole是php的擴展,我們只需要在我們的項目中增加server.php,或者其他的名字,里面的代碼簡單點可以按照文檔上來寫,如下:
//創(chuàng)建Server對象,監(jiān)聽 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); //監(jiān)聽連接進入事件 $serv->on("connect", function ($serv, $fd) { echo "Client: Connect. "; }); //監(jiān)聽數(shù)據(jù)發(fā)送事件 $serv->on("receive", function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); //監(jiān)聽連接關(guān)閉事件 $serv->on("close", function ($serv, $fd) { echo "Client: Close. "; }); //啟動服務(wù)器 $serv->start();
這里就創(chuàng)建了一個TCP服務(wù)器,監(jiān)聽本機9501端口,你也可以改成其他的端口號,只要你的服務(wù)器可以支持這個端口。
服務(wù)器端的server必須運行起來我們才能使用swoole,異步執(zhí)行。如何運行呢?我們cd到你的項目下server.php 所在的文件夾,然后執(zhí)行
php server.php
如何測試成功呢?我們可以關(guān)掉這個客戶端,重新打開連接服務(wù)器,然后執(zhí)行
telnet 127.0.0.1 9501 hello Server: hello
如果是這樣子說明成功了。
需要注意的是我們?nèi)绻薷牧藄erver.php,必須斷掉之前,然后重新打開。
我這邊寫了一個腳本來斷掉之前的,起名stop.sh
#! /bin/bash ps -eaf |grep "server.php" | grep -v "grep"| awk "{print $2}"|xargs kill -9
這需要放在和server.php同一個文件夾。
我們需要cd到這個文件夾,執(zhí)行sh stop.sh
3、client
這個是可以在瀏覽器上執(zhí)行的,我們見一個client.php,代碼如下:
$client = new swoole_client(SWOOLE_SOCK_TCP); //連接到服務(wù)器 if (!$client->connect("127.0.0.1", 9501, 0.5)) { die("connect failed."); } //向服務(wù)器發(fā)送數(shù)據(jù) if (!$client->send("hello world")) { die("send failed."); } //從服務(wù)器接收數(shù)據(jù) $data = $client->recv(); if (!$data) { die("recv failed."); } echo $data; //關(guān)閉連接 $client->close();
創(chuàng)建一個TCP的同步客戶端,此客戶端可以用于連接到我們server服務(wù)器。向服務(wù)器端發(fā)送一個hello world字符串,服務(wù)器會返回一個 Server: hello world字符串。
以上是swoole簡單的安裝和連同。
yii2集成swoole
有需要的朋友可以去yii2-swoole這個地址下載,yii2集成swoole的代碼。
參考資料:
關(guān)于異步任務(wù)隊列
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21811.html
摘要:目錄初識創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。參加工作有一段時間了,偶爾會聽到,對我這種小白粗略看下文檔都會覺得很牛逼。個人理解就是解決這樣應(yīng)用場景的。 目錄 初識Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 參加工作有一段時間了,偶爾會聽到swoole,對我這種PHP小白粗略看下文檔都會覺得很牛逼。由于學(xué)習(xí)成本比較高,自身對網(wǎng)絡(luò)異...
閱讀 3327·2023-04-26 00:58
閱讀 1278·2021-09-22 16:04
閱讀 3324·2021-09-02 15:11
閱讀 1570·2019-08-30 15:55
閱讀 2348·2019-08-30 15:55
閱讀 3281·2019-08-23 18:41
閱讀 3471·2019-08-23 18:18
閱讀 2760·2019-08-23 17:53