首頁 > 後端開發 > php教程 > Laravel廣播的工作方式

Laravel廣播的工作方式

尊渡假赌尊渡假赌尊渡假赌
發布: 2025-03-05 09:27:14
原創
131 人瀏覽過

今天,我們將在Laravel Web框架中探索廣播的概念。當服務器端發生某些事情時,它允許您將通知發送到客戶端。在本文中,我們將使用第三方Pusher庫將通知發送到客戶端。

>

如果您曾經想在Laravel中的服務器上發生某些事情時,您正在尋找廣播功能的某些事情時將通知從服務器發送到客戶端。現在,當用戶A向用戶B發送消息時,您需要實時通知用戶B。 You may display a popup or an alert box that informs user B about the new message!

It's the perfect use-case to walk through the concept of broadcasting in Laravel, and that's what we'll implement in this article.

If you are wondering how the server could send notifications to the client, it's using sockets under the hood to accomplish it.讓我們了解插座的基本流程,然後再深入研究實際實施。

首先,您需要一台支持Web-Sockets協議的服務器,允許客戶端建立Web套接字連接。
    您可以實現自己的服務器或使用自己的服務器或使用第三方服務。我們將更喜歡本文中的後者。
  • >客戶在成功連接時啟動了與Web套接字服務器的Web套接字連接,並在連接成功時接收唯一的標識符。
  • >
  • 連接成功,客戶將訂閱某些頻道,它將訂閱它想要接收事件的某些頻道。服務器端,當發生特定事件時,我們通過提供頻道名稱和事件名稱來告知Web-Socket服務器。
  • ,最後,Web-Socket Server將該事件廣播到該特定頻道上註冊的客戶端。
  • >
  • >在單個go中看起來是否太多,請不要擔心。當我們瀏覽本文時,您將掌握它。
  • 廣播配置文件
  • >
  • 接下來,讓我們查看
config/broadcasting.php

<?php<br><br>return [<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Default Broadcaster<br>    |--------------------------------------------------------------------------<br>    |<br>    | This option controls the default broadcaster that will be used by the<br>    | framework when an event needs to be broadcast. You may set this to<br>    | any of the connections defined in the "connections" array below.<br>    |<br>    | Supported: "pusher", "redis", "log", "null"<br>    |<br>    */<br><br>    'default' => env('BROADCAST_DRIVER', 'null'),<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Broadcast Connections<br>    |--------------------------------------------------------------------------<br>    |<br>    | Here you may define all of the broadcast connections that will be used<br>    | to broadcast events to other systems or over websockets. Samples of<br>    | each available type of connection are provided inside this array.<br>    |<br>    */<br><br>    'connections' => [<br><br>        'pusher' => [<br>            'driver' => 'pusher',<br>            'key' => env('PUSHER_APP_KEY'),<br>            'secret' => env('PUSHER_APP_SECRET'),<br>            'app_id' => env('PUSHER_APP_ID'),<br>            'options' => [<br>                'cluster' => env('PUSHER_APP_CLUSTER'),<br>                'useTLS' => true,<br>            ],<br>        ],<br><br>        'redis' => [<br>            'driver' => 'redis',<br>            'connection' => 'default',<br>        ],<br><br>        'log' => [<br>            'driver' => 'log',<br>        ],<br><br>        'null' => [<br>            'driver' => 'null',<br>        ],<br><br>    ],<br><br>];<br>
登入後複製
登入後複製
登入後複製

的默認廣播配置文件,默認情況下,請訪問多個core new eyan new new new nect of there norker of there corect of。使用日誌適配器。當然,如果您將推動器

適配器用作我們的默認廣播驅動程序。 So let's change the migration file database/migrations/XXXX_XX_XX_XXXXXX_create_messages_table.php before running the migrate command.

...<br>...<br>BROADCAST_DRIVER=pusher<br><br>PUSHER_APP_ID={YOUR_APP_ID}<br>PUSHER_APP_KEY={YOUR_APP_KEY}<br>PUSHER_APP_SECRET={YOUR_APP_SECRET}<br>PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}<br>...<br>...<br>
登入後複製
登入後複製
登入後複製

Now, let's run the messages table in the database.

<?php<br><br>return [<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Default Broadcaster<br>    |--------------------------------------------------------------------------<br>    |<br>    | This option controls the default broadcaster that will be used by the<br>    | framework when an event needs to be broadcast. You may set this to<br>    | any of the connections defined in the "connections" array below.<br>    |<br>    | Supported: "pusher", "redis", "log", "null"<br>    |<br>    */<br><br>    'default' => env('BROADCAST_DRIVER', 'null'),<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Broadcast Connections<br>    |--------------------------------------------------------------------------<br>    |<br>    | Here you may define all of the broadcast connections that will be used<br>    | to broadcast events to other systems or over websockets. Samples of<br>    | each available type of connection are provided inside this array.<br>    |<br>    */<br><br>    'connections' => [<br><br>        'pusher' => [<br>            'driver' => 'pusher',<br>            'key' => env('PUSHER_APP_KEY'),<br>            'secret' => env('PUSHER_APP_SECRET'),<br>            'app_id' => env('PUSHER_APP_ID'),<br>            'options' => [<br>                'cluster' => env('PUSHER_APP_CLUSTER'),<br>                'useTLS' => true,<br>            ],<br>        ],<br><br>        'redis' => [<br>            'driver' => 'redis',<br>            'connection' => 'default',<br>        ],<br><br>        'log' => [<br>            'driver' => 'log',<br>        ],<br><br>        'null' => [<br>            'driver' => 'null',<br>        ],<br><br>    ],<br><br>];<br>
登入後複製
登入後複製
登入後複製
>

創建事件類

每當您想在Laravel提出自定義事件時,都應為該事件創建類。基於事件的類型,Laravel做出了相應的反應並採取必要的操作。

如果事件是正常事件,Laravel稱之為相關的偵聽器類。另一方面,如果事件是廣播類型的,Laravel將該事件發送到在> config/broadcasting.php

文件中配置的Web插座服務器。

當我們在示例中使用pusher服務時,Laravel將在我們的示例中使用laravel將事件發送給Pusher Server。和其他必要的推動器相關信息。

>private移動進一步,我們使用 private <code>user.{USER_ID} Echo的方法來訂閱私有渠道用戶。 {user_id} <code>Echo。正如我們前面討論的那樣,客戶必須在訂閱私人渠道之前對自己進行身份驗證。因此, echo<code>user.{USER_ID}對象通過使用必要的參數在後台發送XHR來執行必要的身份驗證。最後,Laravel試圖找到用戶。 {user_id}<strong>路由,它應該與我們在<ancoutes>文件中定義的路由相匹配。 </ancoutes></strong>

>

>如果一切順利,如果一切順利,則應將Web-Socket連接與推動器Web-Socket Server和IT列表的 user.{USER_ID}

在我們的情況下,我們要聆聽 newMessageNotification <antemification>事件,因此我們使用了<code> listan> listan> echo> echo <y>的方法來實現它。為了使事情變得簡單,我們只會提醒我們從Pusher Server收到的消息。 <p>><code>NewMessageNotification,這就是從Web-Sockockets服務器接收事件的設置。接下來,我們將在控制器文件中瀏覽 send<code>listen的方法,該方法提出了廣播事件。 Echo>

>讓我們快速刪除 send <code> send<p>> <code>send方法的代碼。

>

send

在我們的情況下,我們將在收到新消息時通知登錄用戶。因此,我們試圖在 send<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">...&lt;br&gt;...&lt;br&gt;BROADCAST_DRIVER=pusher&lt;br&gt;&lt;br&gt;PUSHER_APP_ID={YOUR_APP_ID}&lt;br&gt;PUSHER_APP_KEY={YOUR_APP_KEY}&lt;br&gt;PUSHER_APP_SECRET={YOUR_APP_SECRET}&lt;br&gt;PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}&lt;br&gt;...&lt;br&gt;...&lt;br&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>方法中模仿該行為。 <p><code>send接下來,我們使用 event <code> event

助手函數來提高 newMessageNotification <anementification>事件。由於<code> newMessAgeNotification <ante> event屬於<code> shopsbroadcastNow<code>eventtype type type type type NewMessageNotificationconfig/broadcasting.phpNewMessageNotification文件中加載默認的廣播配置。最後,它將 newMessAgeNotification<code>ShouldBroadcastNow事件廣播到用戶上的已配置的Web-Socket服務器。在我們的情況下,該事件將廣播到<ancy>頻道上的Pusher Web-Socket服務器。 If the ID of the recipient user is <p>, the event will be broadcast over the <code>user.{USER_ID} channel.1user.1As we discussed earlier, we already have a setup that listens to events on this channel, so it should be able to receive this event, and the alert box is displayed to the user!

How to Test Our Setup

Let's go ahead and walk through how you are supposed to test the use-case that到目前為止,我們已經構建了。

在您的瀏覽器中打開URL https:// your-laravel-site-domain/message/index。如果您尚未登錄,您將被重定向到登錄屏幕。登錄後,您應該看到我們之前定義的廣播視圖 - 尚無幻想。當我們啟用了按Pusher客戶端庫提供的

>設置時,它將在瀏覽器控制台中記錄所有內容以進行調試。讓我們看看當您訪問http:// your-laravel-site-domain/message/index Page時,它將記錄到控制台的內容。

>Pusher.logToConsole>

它已經使用Pusher Web-Socket Server打開了Web-Socket連接,並訂閱了自身以聆聽私人通道上的事件。當然,您可以根據登錄的用戶的ID具有不同的頻道名稱。現在,讓我們在移動以測試
<?php<br><br>return [<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Default Broadcaster<br>    |--------------------------------------------------------------------------<br>    |<br>    | This option controls the default broadcaster that will be used by the<br>    | framework when an event needs to be broadcast. You may set this to<br>    | any of the connections defined in the "connections" array below.<br>    |<br>    | Supported: "pusher", "redis", "log", "null"<br>    |<br>    */<br><br>    'default' => env('BROADCAST_DRIVER', 'null'),<br><br>    /*<br>    |--------------------------------------------------------------------------<br>    | Broadcast Connections<br>    |--------------------------------------------------------------------------<br>    |<br>    | Here you may define all of the broadcast connections that will be used<br>    | to broadcast events to other systems or over websockets. Samples of<br>    | each available type of connection are provided inside this array.<br>    |<br>    */<br><br>    'connections' => [<br><br>        'pusher' => [<br>            'driver' => 'pusher',<br>            'key' => env('PUSHER_APP_KEY'),<br>            'secret' => env('PUSHER_APP_SECRET'),<br>            'app_id' => env('PUSHER_APP_ID'),<br>            'options' => [<br>                'cluster' => env('PUSHER_APP_CLUSTER'),<br>                'useTLS' => true,<br>            ],<br>        ],<br><br>        'redis' => [<br>            'driver' => 'redis',<br>            'connection' => 'default',<br>        ],<br><br>        'log' => [<br>            'driver' => 'log',<br>        ],<br><br>        'null' => [<br>            'driver' => 'null',<br>        ],<br><br>    ],<br><br>];<br>
登入後複製
登入後複製
登入後複製
>方法的過程中保持此頁面打開。

send接下來,讓我們打開http:// your-laravel-site-domain/message/message/message/message/send url在另一個選項卡或其他瀏覽器中發送url。如果您要使用其他瀏覽器,則需要登錄才能訪問該頁面。發生了。

,它告訴您,您剛剛從

>頻道上的Pusher Web-Socket Server收到了

事件。轉到您的推動器帳戶並導航到您的應用程序。在

debug
...<br>...<br>BROADCAST_DRIVER=pusher<br><br>PUSHER_APP_ID={YOUR_APP_ID}<br>PUSHER_APP_KEY={YOUR_APP_KEY}<br>PUSHER_APP_SECRET={YOUR_APP_SECRET}<br>PUSHER_APP_CLUSTER={YOUR_APP_CLUSTER}<br>...<br>...<br>
登入後複製
登入後複製
登入後複製

> consoleAppEventsNewMessageNotification>下,您應該能夠查看已記錄的消息。 private-user.2

> ,這將我們帶到了本文的結尾!希望在我試圖最大程度地簡化事物時,這並不是太多了。 >

>結論

今天,我們經歷了Laravel -Broadcasting的最少討論的功能之一。它允許您使用Web插座發送實時通知。在本文的整個過程中,我們建立了一個現實世界的示例,該示例證明了上述概念。

以上是Laravel廣播的工作方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板