摘要:目錄初識創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。什么是異步任務(wù)把當(dāng)前的任務(wù)異步投遞到進程池中執(zhí)行,不影響接下來的事務(wù)。
目錄
初識Swoole
創(chuàng)建服務(wù)器(上)
創(chuàng)建服務(wù)器(下)
異步任務(wù)task
持續(xù)更新中。。。
什么是異步任務(wù)?1.把當(dāng)前的任務(wù)異步投遞到TaskWorker進程池中執(zhí)行,不影響接下來的事務(wù)。
舉個栗子:
在一些需要耗時間長的任務(wù)可以采取這種方案
不管從性能的發(fā)揮還是用戶體驗都是比傳統(tǒng)的方式舒服很多
web_server.php
$server = new swoole_websocket_server("0.0.0.0", 8811); $server->set( [ "task_worker_num" => 2,//設(shè)置異步任務(wù)的工作進程數(shù)量,可以根據(jù)任務(wù)的耗時和任務(wù)量配置適量的task進程。 ] ); $server->on("message", function ($server, $frame) { echo "fd為: ".$frame->fd."發(fā)送了:".$frame->data." "; //投遞異步任務(wù) $task_id = $server->task($frame->fd); echo "我們繼續(xù)訪問 "; }); $server->on("task", function ($server, $task_id, $from_id,$data) { for ($i=1; $i <=5 ; $i++) { sleep(2);//休息2秒 echo "taskid為:".$task_id."完成任務(wù)".$i."/5的任務(wù)了 "; } $server->finish($data); }); //處理異步任務(wù)的結(jié)果 $server->on("finish", function ($server, $task_id, $data) { echo "fd為:".$data.",task為:".$task_id."任務(wù)完成的時間是:".date("Y-m-d H:i:s")." "; }); $server->start();
客戶端js代碼
var url="ws://你的ip地址:8811"; var websocket =new WebSocket(url); websocket.onopen = function (evt) { console.log("Connected to WebSocket server."); websocket.send("客戶端:建立鏈接成功"); }; websocket.onclose = function (evt) { console.log("Disconnected"); }; websocket.onmessage = function (evt) { console.log("Retrieved data from server: " + evt.data); }; websocket.onerror = function (evt, e) { console.log("Error occured: " + evt.data); };
我們先打開web_server,
然后通過瀏覽器打開2個客戶端,這里為了區(qū)別進程,2個客戶端打開的時間我是相差了幾秒打開的
這個時候看終端,重點來了:
結(jié)論所以我們得出了以下的結(jié)論:
1.task可以作為進程在后臺運行不影響后面的執(zhí)行,這里是異步的
2.task可以設(shè)置多個,一個task被占用,就使用另一個,
3.task完成任務(wù)之后,它就會被閑置,可以給下個客戶端使用(本案例沒有展示出效果,有興趣可以test一下)
1.這個要注意task的數(shù)目,防止開銷過多的性能
2.注意防止進程的堵塞,阻塞的進程十分耗資源而已長期占用無法被下個客戶端使用
3.exit/die是危險的,會導(dǎo)致Worker進程退出
swoole里面的異步IO 讀寫文件 讀寫mysql 讀寫redis 也是異曲同工
異步IO 是先返回結(jié)果 再進行IO,不過這種大多應(yīng)用于耗時間長但是結(jié)果不影響程序的情況,比如:
文章閱讀量+1
同步的流程是 redis/mysql 數(shù)據(jù)+1->顯示文章
而異步的流程是 直接顯示文章 然后再發(fā)redis/mysql 數(shù)據(jù)+1
這樣子用戶就減少了等待的時間,當(dāng)然還有很多場景也適用
有興趣的小伙伴可以繼續(xù)研究文檔io的部分,這里就不繼續(xù)深究了
如果這篇文章對你有用,可以點個贊或者是收藏,算是對作者的鼓勵~
文檔地址傳送門:https://wiki.swoole.com/wiki/...
推薦singwa老師的視頻教程:https://coding.imooc.com/clas...
另附上小弟網(wǎng)站。。。www.entercode.cn 推廣一波...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28645.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ò)異...
摘要:目錄初識創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。而它的最大特點就是,服務(wù)器可以主動向客戶端推送信息,客戶端也可以主動向服務(wù)器發(fā)送信息,是真正的雙向平等對話,屬于服務(wù)器推送技術(shù)的一種。 目錄 初識Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 1.創(chuàng)建HttpServer服務(wù)器 HttpServer是基于swoole_server,所以s...
摘要:目錄初識創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。啟動后,客戶端無需,直接可以向監(jiān)聽的端口發(fā)送數(shù)據(jù)包。 目錄 初識Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 1.創(chuàng)建tcp服務(wù)器 先照著文檔創(chuàng)建一個tcp服務(wù)器
摘要:圖中其他兩個文件和是郵件發(fā)送類的核心文件,為了簡化調(diào)用,抽取了出來,詳細(xì)的用法和參數(shù)設(shè)置,可以參考的使用說明注意點在此步驟中,我們需要注意幾點是你設(shè)置的郵件發(fā)送的賬號是否已經(jīng)開啟并且找對對應(yīng)的安全協(xié)議和端口號。 1、環(huán)境說明 阿里云centos7thinkphp5.0.11swoole2.0.8 2、tp實現(xiàn)郵件發(fā)送 在項目下建立如下的文件目錄:showImg(https://segm...
閱讀 1535·2021-11-22 09:34
閱讀 3332·2021-09-29 09:35
閱讀 577·2021-09-04 16:40
閱讀 2922·2019-08-30 15:53
閱讀 2596·2019-08-30 15:44
閱讀 2593·2019-08-30 14:10
閱讀 1337·2019-08-29 18:43
閱讀 2219·2019-08-29 13:26