本文目錄一覽:
利用php +swoole如何實現異步任務隊列
class msgServer
{
private $serv;
function __construct()
{
$this-serv = new Swoole\Server(“127.0.0.1”, 9501);//創建一個服務
$this-serv-set(array(‘task_worker_num’ = 4)); //配置task進程的數量
$this-serv-on(‘receive’, array($this, ‘onReceive’));//有數據進來的時候執行
$this-serv-on(‘task’, array($this, ‘onTask’));//有任務的時候執行
$this-serv-on(‘finish’, array($this, ‘onFinish’));//任務結束時執行
$this-serv-start();
}
public function onReceive($serv, $fd, $from_id, $data)
{
$data = json_decode($data, true);
$task_id = $serv-task($data);//這裡發起了任務,於是上面的on(‘task’, array($this, ‘onTask’))就會執行
}
public function onTask($serv, $task_id, $from_id, $data)
{
$data[‘send_res’] = $this-sendMsg($data); //發送短信
//1.7.3之前,是$serv-finish(“result”);
return “result.”;//這裡告訴任務結束,於是上面的on(‘finish’, array($this, ‘onFinish’))就會執行
}
public function onFinish($serv, $task_id, $data)
{
$this-addSendLog($data); //添加短信發送記錄
}
}
請教php的laravel怎麼整合swoole實現rpc呢?
安裝swoole擴展
composer安裝laravel
composer安裝swooletw插件
laravel中添加swoole服務
composer安裝thrift rpc依賴包
創建一個service實現thrift接口
新建sockets目錄,創建服務端代理類
創建傳輸層
編寫swoole的rpc服務器類
10.客戶端編寫測試用例即可。
php為什麼要用swoole
Swoole 使 PHP 開發人員可以編寫高性能高並發的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再局限於 Web 領域。Swoole4 協程的成熟將 PHP 帶入了前所未有的時期, 為性能的提升提供了獨一無二的可能性。Swoole 可以廣泛應用於互聯網、移動通信、雲計算、 網絡遊戲、物聯網(IOT)、車聯網、智能家居等領域。使用 PHP + Swoole 可以使企業 IT 研發團隊的效率大大提升,更加專註於開發創新產品。
使用Swoole+PHP開發的IM
(一)擴展安裝
本demo需要的擴展有Swoole、MongoDB、Redis
(二)詳細步驟
1、Client在進行長連接操作時會在鏈接後面跟上用戶id,Server在接受到用戶id後會將此id與線程id進行綁定,並存入Redis中。
2、Client觸發send事件後,會將此消息追加到本地的消息列表中(此時為消息的發送方)。Server在觸發onMessage事件後首先會將消息內容存入DB,然後再根據此消息接收者的用戶id找到對應的線程id並進行push操作。
3、Client觸發onmessage事件後會拿到消息內容並將此內容追加到本地消息列表中。(此時為消息的接收方)
至此,IM的流程就大致梳理完了。
效果圖如下:
項目源碼:
體驗地址:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152880.html