久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Laravel構建即時應用的一種實現方法詳解

這篇文章主要給大家介紹了關于Laravel構建即時應用的一種實現方法,即時通訊在我們日常的開發中經常會遇到,本文通過示例代碼介紹的非常詳細,需要的朋友們可以參考借鑒,下面隨

即時交互的應用

大家應該都有所體會,在現代的 Web 應用中很多場景都需要運用到即時通訊,比如說最常見的支付回調,與三方登錄。這些業務場景都基本需要遵循以下流程:

  • 客戶端觸發相關業務,并產生第三方應用的操作(比如支付)
  • 客戶端等待服務端響應結果(用戶完成第三方應用的操作)
  • 第三方應用通知服務端處理結果(支付完成)
  • 服務端通知客戶端處理結果
  • 客戶端依據結果做出反饋 (跳轉到支付成功頁面)

在過去,為了實現這種即時通訊,能讓客戶端正確響應處理結果,最為常用的技術就是輪詢,因為 HTTP 協議的單向性,客戶端只能一遍一遍的主動詢問服務端的處理結果。這種方式有顯見的缺陷,占用服務端資源不說,還不能實時獲得服務端處理結果。

現在,我們可以使用 WebSocket 協議來處理實時交互,它是一種雙向協議,允許服務端主動推送信息到客戶端。本篇我們將借助 Laravel 強大的事件系統來構建實時的交互。你將需要用到以下知識:

  • Laravel Event
  • Redis
  • Socket.io
  • Node.js

Redis

在開始之前,我們需要開啟一個 redis 服務,并在 Laravel 應用中進行配置啟用,因為在整個流程中,我們需要借助 redis 的訂閱和發布機制來實現即時通訊。

Redis 是一個開源高效的鍵值對存儲系統。它通常作為一個數據結構服務器來存儲鍵值對,它可以支持字符串,散列,列表,集合和有序結合。在 Laravel 中使用 Redis 你需用通過 Composer 來安裝 predis/predis 包文件。

配置

Redis 在應用中的配置文件存儲在 config/database.php,在這個文件中,你可以看到一個包含了 Redis 服務信息的 redis 數組:

'redis' => [
 'cluster' => false,

 'default' => [
 'host' => '127.0.0.1',
 'port' => 6379,
 'database' => 0,
 ],
]

如果你修改了 redis 服務的端口,請保持配置文件中的端口一致。

Laravel Event

這里我們需要借助 Laravel 強大的事件廣播能力:

廣播事件

很多現代化的應用中,會使用 Web Sockets 來實現實時交互的用戶接口。當一些數據在服務端變更時,一條消息會通過 WebSocket 連接來傳遞到客戶端進行處理。

為了幫助你構建這種類型的應用。Laravel 使通過 WebSocket 連接進行廣播事件變的非常簡單。Laravel 允許你廣播事件來共享事件的名稱到你的服務端和客戶端的 JavaScript 框架。

配置

所有的事件廣播配置選項都被存儲在 config/broadcasting.php 配置文件中。Laravel 附帶了幾種可用的驅動如 Pusher,Redis,和 Log,我們將使用 Redis 作為廣播驅動,這里需要依賴 predis/predis 類庫。

由于默認的廣播驅動使用的是 pusher,所以我們需要在 .env 文件中設置 BROADCAST_DRIVER=redis

我們創建一個 WechatLoginedEvent 事件類用來在用戶掃描微信登錄后進行廣播:

<?php

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class WechatLoginedEvent extends Event implements ShouldBroadcast
{
 use SerializesModels;

 public $token;
 protected $channel;

 /**
  * Create a new event instance.
  *
  * @param string $token
  * @param string $channel
  * @return void
  */
 public function __construct($token, $channel)
 {
  $this->token = $token;
  $this->channel = $channel;
 }

 /**
  * Get the channels the event should be broadcast on.
  *
  * @return array
  */
 public function broadcastOn()
 {
  return [$this->channel];
 }

 /**
  * Get the name the event should be broadcast on.
  *
  * @return string
  */
 public function broadcastAs()
 {
  return 'wechat.login';
 }
}

其中你需要注意 broadcastOn 方法應返回一個數組,它表示所需廣播的頻道,而 broadcastAs 返回的是一個字符串,它表示廣播所觸發的事件,Laravel 默認的是返回事件類的全類名,這里是 App\Events\WechatLoginedEvent.

最重要的是你需要手動的讓該類實現 ShouldBroadcast 契約。Laravel 在生成事件時,已經自動添加了該命名空間,該契約只約束 broadcastOn 方法。

事件完成接下來就是觸發事件了,簡單的一行代碼就可以:

event(new WechatLoginedEvent($token, $channel));

這個操作會自動的觸發事件的執行并將信息廣播出去。該廣播操作底層借助了 redis 的訂閱和發布機制。

【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

標簽作用:用于根據條件輸出不同內容 1、IF語句格式: {pboot:if(a==b)} 內容1 {else} 內容2 {/pboot:if} 使用提示: 對于非數字類的條件均為字符串類型,請加上引號,如:{pboot:if([list:author]
本文給大家分享的是如何把PHP應用容器化,以及使用docker在服務器上部署PHP應用,非常的簡單實用,有需要的小伙伴可以參考下
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應用程序,并傳遞相關參數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要給大家介紹了如何通過源碼解析Laravel的依賴注入的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關于Laravel中unique和exists驗證規則的優化的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面
主站蜘蛛池模板: 亚洲av一级毛片 | 精品视频免费在线 | 中文字幕亚洲视频 | a在线免费观看视频 | 国产精品看片 | 人人九九精 | 国产精品免费在线 | 中文字幕在线观看成人 | 精品福利在线 | 成人a视频在线观看 | 国产精品色一区二区三区 | 欧美精品久久 | 久久国产视频网站 | 狠狠干美女 | 亚洲一区二区久久 | 久久综合一区 | 国产亚洲高清视频 | 久久久久久久久国产成人免费 | 一区二区视频在线观看 | www.yw193.com| 亚洲综合在线视频 | 中文字幕在线视频网站 | 一区二区三区播放 | 亚洲一区二区三区在线 | 特黄小视频 | 成人免费视频观看 | 91免费在线看 | 免费在线看黄视频 | 欧美激情一区二区 | 日韩高清一区二区 | 欧美涩| 欧美一区二区三区在线观看 | 午夜国产一级片 | www日本在线| 国产一区久久 | 粉嫩一区二区三区国产精品 | 黄色三级免费网站 | 在线日韩| 九一视频在线播放 | 国产一区中文 | 欧美一级片在线看 |