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

Laravel構(gòu)建即時(shí)應(yīng)用的一種實(shí)現(xiàn)方法詳解

這篇文章主要給大家介紹了關(guān)于Laravel構(gòu)建即時(shí)應(yīng)用的一種實(shí)現(xiàn)方法,即時(shí)通訊在我們?nèi)粘5拈_發(fā)中經(jīng)常會(huì)遇到,本文通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們可以參考借鑒,下面隨

即時(shí)交互的應(yīng)用

大家應(yīng)該都有所體會(huì),在現(xiàn)代的 Web 應(yīng)用中很多場(chǎng)景都需要運(yùn)用到即時(shí)通訊,比如說(shuō)最常見的支付回調(diào),與三方登錄。這些業(yè)務(wù)場(chǎng)景都基本需要遵循以下流程:

  • 客戶端觸發(fā)相關(guān)業(yè)務(wù),并產(chǎn)生第三方應(yīng)用的操作(比如支付)
  • 客戶端等待服務(wù)端響應(yīng)結(jié)果(用戶完成第三方應(yīng)用的操作)
  • 第三方應(yīng)用通知服務(wù)端處理結(jié)果(支付完成)
  • 服務(wù)端通知客戶端處理結(jié)果
  • 客戶端依據(jù)結(jié)果做出反饋 (跳轉(zhuǎn)到支付成功頁(yè)面)

在過(guò)去,為了實(shí)現(xiàn)這種即時(shí)通訊,能讓客戶端正確響應(yīng)處理結(jié)果,最為常用的技術(shù)就是輪詢,因?yàn)?HTTP 協(xié)議的單向性,客戶端只能一遍一遍的主動(dòng)詢問(wèn)服務(wù)端的處理結(jié)果。這種方式有顯見的缺陷,占用服務(wù)端資源不說(shuō),還不能實(shí)時(shí)獲得服務(wù)端處理結(jié)果。

現(xiàn)在,我們可以使用 WebSocket 協(xié)議來(lái)處理實(shí)時(shí)交互,它是一種雙向協(xié)議,允許服務(wù)端主動(dòng)推送信息到客戶端。本篇我們將借助 Laravel 強(qiáng)大的事件系統(tǒng)來(lái)構(gòu)建實(shí)時(shí)的交互。你將需要用到以下知識(shí):

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

Redis

在開始之前,我們需要開啟一個(gè) redis 服務(wù),并在 Laravel 應(yīng)用中進(jìn)行配置啟用,因?yàn)樵谡麄€(gè)流程中,我們需要借助 redis 的訂閱和發(fā)布機(jī)制來(lái)實(shí)現(xiàn)即時(shí)通訊。

Redis 是一個(gè)開源高效的鍵值對(duì)存儲(chǔ)系統(tǒng)。它通常作為一個(gè)數(shù)據(jù)結(jié)構(gòu)服務(wù)器來(lái)存儲(chǔ)鍵值對(duì),它可以支持字符串,散列,列表,集合和有序結(jié)合。在 Laravel 中使用 Redis 你需用通過(guò) Composer 來(lái)安裝 predis/predis 包文件。

配置

Redis 在應(yīng)用中的配置文件存儲(chǔ)在 config/database.php,在這個(gè)文件中,你可以看到一個(gè)包含了 Redis 服務(wù)信息的 redis 數(shù)組:

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

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

如果你修改了 redis 服務(wù)的端口,請(qǐng)保持配置文件中的端口一致。

Laravel Event

這里我們需要借助 Laravel 強(qiáng)大的事件廣播能力:

廣播事件

很多現(xiàn)代化的應(yīng)用中,會(huì)使用 Web Sockets 來(lái)實(shí)現(xiàn)實(shí)時(shí)交互的用戶接口。當(dāng)一些數(shù)據(jù)在服務(wù)端變更時(shí),一條消息會(huì)通過(guò) WebSocket 連接來(lái)傳遞到客戶端進(jìn)行處理。

為了幫助你構(gòu)建這種類型的應(yīng)用。Laravel 使通過(guò) WebSocket 連接進(jìn)行廣播事件變的非常簡(jiǎn)單。Laravel 允許你廣播事件來(lái)共享事件的名稱到你的服務(wù)端和客戶端的 JavaScript 框架。

配置

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

由于默認(rèn)的廣播驅(qū)動(dòng)使用的是 pusher,所以我們需要在 .env 文件中設(shè)置 BROADCAST_DRIVER=redis

我們創(chuàng)建一個(gè) WechatLoginedEvent 事件類用來(lái)在用戶掃描微信登錄后進(jìn)行廣播:

<?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 方法應(yīng)返回一個(gè)數(shù)組,它表示所需廣播的頻道,而 broadcastAs 返回的是一個(gè)字符串,它表示廣播所觸發(fā)的事件,Laravel 默認(rèn)的是返回事件類的全類名,這里是 App\Events\WechatLoginedEvent.

最重要的是你需要手動(dòng)的讓該類實(shí)現(xiàn) ShouldBroadcast 契約。Laravel 在生成事件時(shí),已經(jīng)自動(dòng)添加了該命名空間,該契約只約束 broadcastOn 方法。

事件完成接下來(lái)就是觸發(fā)事件了,簡(jiǎn)單的一行代碼就可以:

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

這個(gè)操作會(huì)自動(dòng)的觸發(fā)事件的執(zhí)行并將信息廣播出去。該廣播操作底層借助了 redis 的訂閱和發(fā)布機(jī)制。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

標(biāo)簽作用:用于根據(jù)條件輸出不同內(nèi)容 1、IF語(yǔ)句格式: {pboot:if(a==b)} 內(nèi)容1 {else} 內(nèi)容2 {/pboot:if} 使用提示: 對(duì)于非數(shù)字類的條件均為字符串類型,請(qǐng)加上引號(hào),如:{pboot:if([list:author]
本文給大家分享的是如何把PHP應(yīng)用容器化,以及使用docker在服務(wù)器上部署PHP應(yīng)用,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應(yīng)用程序,并傳遞相關(guān)參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
下面小編就為大家分享一篇laravel ORM 只開啟created_at的幾種方法總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要給大家介紹了如何通過(guò)源碼解析Laravel的依賴注入的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著
這篇文章主要給大家介紹了關(guān)于Laravel中unique和exists驗(yàn)證規(guī)則的優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面
主站蜘蛛池模板: 欧美精品在线一区二区三区 | 欧美日韩亚洲一区 | 美人の美乳で授乳プレイ | 一级做a爰片久久毛片免费看 | 中文字字幕一区二区三区四区五区 | 国产一级毛片精品完整视频版 | 日韩精品久久久久久 | 午夜免费视频 | 久在线观看 | 中文字幕二区 | 日韩在线h | 91精品国产色综合久久不卡98 | 亚洲区一区二 | 亚洲欧美一区二区三区国产精品 | 天天干天天插天天 | 日韩视频二区 | 国产小u女发育末成年 | 欧美视频福利 | 国产精品美女久久久久aⅴ国产馆 | 毛片免费观看视频 | 黄色在线免费看 | 91精品国产欧美一区二区 | 精品九九 | 欧美视频免费在线 | 欧美激情视频一区二区三区在线播放 | 一区二区三区四区电影 | 久久国产精品久久久久久 | 黄色片网站国产 | 国产精品美女在线观看 | 黄色毛片一级 | 妞干网av| 亚洲精品视频三区 | 久久久视 | 狠狠草视频 | 久久精品久久久久久 | 成人精品视频在线观看 | 久久精品亚洲欧美日韩久久 | 亚洲一区二区三区免费在线 | 国产亚洲精品精品国产亚洲综合 | 欧美a v在线 | 在线视频 亚洲 |