摘要:假如我們要發布封郵件,用一個循環,循環遍執行發郵件操作。我采取的是第二種方式噢。安裝完成,需要更改的配置,將放在這個配置中,然后重啟。向服務器端發送一個字符串,服務器會返回一個字符串。以上是簡單的安裝和連同。
什么是swoole
swoole是PHP的異步、并行、高性能網絡通信引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis,數據庫連接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。
Swoole可以廣泛應用于互聯網、移動通信、企業軟件、云計算、網絡游戲、物聯網(IOT)、車聯網、智能家居等領域。 使用PHP+Swoole作為網絡通信框架,可以使企業IT研發團隊的效率大大提升,更加專注于開發創新產品。隨著我們
我們為什么用swoole
用戶打開了我們的網站。他要做的就是勾選需要發郵件的代理商列表,然后把結算郵件發出去。
假如我們需要發1封郵件,我們寫個函數執行即可。考慮到網絡可能會稍微有點延遲,但是是可以接受的,用戶會乖乖等你的網頁發完郵件了再關閉網頁。
假如我們要發布10封郵件,用一個for循環,循環10遍執行發郵件操作。這時候,也許10倍的網絡延遲會讓用戶稍微有點不耐煩,但勉強可以等吧。
假如要發100封郵件,for循環100遍,用戶直接揭竿而起,什么破網站!
但實際上,我們很可能有超過1萬的郵件。怎么處理這個延遲的問題?
答案就是用異步。把“發郵件”這個操作封裝,然后后臺異步地執行1萬遍。這樣的話,用戶提交網頁后,他所等待的時間只是“把發郵件任務請求推送進隊列里”的時間。而我們的后臺服務將在用戶看不見的地方跑。而swoole就為我們實現了異步隊列處理及并發等問題。
如何使用
1、安裝swoole
有兩種安裝方式,一種是先下載安裝包,傳到服務器(記住一定是linux服務器)上,然后解壓,然后先cd到服務器的安裝包的位置,然后執行
phpize ./configure make sudo make install
系統就會自動安裝,如果提示phpize不存在的話,就需要安裝一下phpize.
另一種方式直接執行
pecl install swoole
用這種方式可以自動下載安裝。
我采取的是第二種方式噢。
安裝完成,需要更改php.ini的配置,將
extension=swoole.so
放在這個配置中,然后重啟nginx。
完成以后執行
php -m
查看是否有swoole。有swoole說明安裝成功。
2.啟動server
之前看文檔我一直以為swoole是個框架,需要我們配置然后設置端口訪問,其實不是,swoole是php的擴展,我們只需要在我們的項目中增加server.php,或者其他的名字,里面的代碼簡單點可以按照文檔上來寫,如下:
//創建Server對象,監聽 127.0.0.1:9501端口 $serv = new swoole_server("127.0.0.1", 9501); //監聽連接進入事件 $serv->on("connect", function ($serv, $fd) { echo "Client: Connect. "; }); //監聽數據發送事件 $serv->on("receive", function ($serv, $fd, $from_id, $data) { $serv->send($fd, "Server: ".$data); }); //監聽連接關閉事件 $serv->on("close", function ($serv, $fd) { echo "Client: Close. "; }); //啟動服務器 $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
3、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的代碼。
參考資料:
關于異步任務隊列
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21811.html
摘要:目錄初識創建服務器上創建服務器下異步任務持續更新中。。。參加工作有一段時間了,偶爾會聽到,對我這種小白粗略看下文檔都會覺得很牛逼。個人理解就是解決這樣應用場景的。 目錄 初識Swoole 創建服務器(上) 創建服務器(下) 異步任務task 持續更新中。。。 參加工作有一段時間了,偶爾會聽到swoole,對我這種PHP小白粗略看下文檔都會覺得很牛逼。由于學習成本比較高,自身對網絡異...
閱讀 3319·2023-04-26 00:58
閱讀 1270·2021-09-22 16:04
閱讀 3315·2021-09-02 15:11
閱讀 1565·2019-08-30 15:55
閱讀 2344·2019-08-30 15:55
閱讀 3258·2019-08-23 18:41
閱讀 3467·2019-08-23 18:18
閱讀 2756·2019-08-23 17:53