Laravel - laravel-websockets 開發詳解

1.我laravel-websockets 的開發環境

  • Laravel 9.0
  • Laravel WebSockets?(最新版)
  • Laravel Vite

2. 安裝服務器端包 beyondcode/laravel-websockets

  • 運行以下命令安裝laravel-websockets
composer require beyondcode/laravel-websockets
  • 安裝完后,發布 Laravel WebSockets 的配置文件
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"
  • ?發布遷移文件
php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"
  • 運行遷移以創建數據庫表?
php artisan migrate

?若安裝失敗,試試更新所有第三方庫:composer update

?3.安裝pusher

composer require pusher/pusher-php-server

?4.配置 .env 文件,根據你自身情況填寫。

PUSHER_APP_ID=your_app_id
PUSHER_APP_KEY=your_app_key
PUSHER_APP_SECRET=your_app_secret
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
PUSHER_APP_CLUSTER=mt1

?此外,還需將 .env 文件中 ,BROADCAST_DRIVER 的值改為 pusher

BROADCAST_DRIVER=pusher

?5.開始創建通知事件,運行以下命令

php artisan make:event SimpleNoticeMessage

?具體代碼如下:

<?phpnamespace App\Events;use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;class SimpleNoticeMessage implements ShouldBroadcast
{use Dispatchable, InteractsWithSockets, SerializesModels;public $message;/*** Create a new event instance.** @return void*/public function __construct($message){$this->message = $message;}/*** 獲取事件應廣播的頻道.* 頻道應該是 Channel、PrivateChannel 或 PresenceChannel 的實例。 Channel 的實例代表任何用戶都可以訂閱的公共頻道,而 PrivateChannels 和 PresenceChannels 代表需要 頻道授權 的私人頻道:* 我的理解就是需要發送給誰** @return \Illuminate\Broadcasting\Channel|array*/public function broadcastOn(){return new Channel('test');}/*** 事件的廣播名稱。(事件名稱)* 可選* 如果沒定義事件名稱,則在客戶端監聽事件的時候填寫的是 類名,即SimpleNoticeMessage* 如果定義了 則未 .server.admin.notice,注意最前面有個 .* @return string*/public function broadcastAs(){return 'server.test.notice';}
}

6.客戶端安裝?laravel-echo

npm install --save-dev laravel-echo pusher-js
  • 配置?resources\js\bootstrap.js 文件,在創建laravel 文件時有,取消注釋就行,代碼如下
import Echo from 'laravel-echo';import Pusher from 'pusher-js';
window.Pusher = Pusher;window.Echo = new Echo({broadcaster: 'pusher',key: import.meta.env.VITE_PUSHER_APP_KEY,cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',enabledTransports: ['ws', 'wss'],
});
  • ?頁面腳本配置,在 resources\views\index.blade.php? 文件 的 head 標簽的結尾添加以下代碼
@vite('resources/js/app.js')
<script>window.onload = function(){Echo.channel('test').listen('.server.test.notice', (e) => {console.log(e.message);});}</script>

?7.發送消息,新建控制器 testCl

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Events\SimpleNoticeMessage;class testCl extends Controller{public function sendMsg(Request $request){SimpleNoticeMessage::dispatch("hello world");return "發送成功";}
}

?8.啟動項目,為以下命令各開一個終端運行

  • php artisan serve? ?啟動laravel 項目
  • npm run dev 啟動vite
  • php artisan queue:work 啟動隊列
  • php artisan websockets:serve 啟動websockets 服務器

?9.結束。

  • 在頁面訪問?testCl 控制器空的sendMsg 方法,即可。
  • 內部測試,新建一個終端窗口。運行?php artisan tinker ,在窗口中 輸入?event (new \App\Events\SimpleNoticeMessage('hello world')) ,回車有,即可在前端控制中打印出 hellow world
  • 調試面板,運行: 127.0.0.1:8000/laravel-websockets ,也可查看出的消息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42992.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Linux命令入門】查找文件

文章目錄 前言whichlocatewhereisfindgrep總結前言 在日常的Linux使用中,我們經常需要查找文件,無論是為了找到某個特定的配置文件,還是為了找到某個丟失的文檔。Linux提供了一些強大的命令行工具,可以幫助我們在系統中查找文件。這些工具包括find,locate,which,wherei…

「樹莓派入門」樹莓派進階02-傳感器應用與交通燈項目

傳感器是樹莓派實現智能化的關鍵。通過本教程,你可以開始嘗試使用傳感器來增強樹莓派的功能。 一、傳感器在樹莓派中的作用 傳感器是樹莓派與外界環境交互的重要工具。它們可以檢測各種物理量,如光、聲音、溫度等,并將這些物理量轉換為電信號,供樹莓派讀取和處理。 二、數…

C++ Linux調試(無IDE)

跨平臺IDE編譯調試C很方便&#xff0c;如QTCreate 、VSCode、Eclipse等&#xff0c;但是如果只能使用Shell控制臺呢&#xff0c;gdb調試的優勢就很明顯了&#xff0c;在沒有IDE的情況下&#xff0c;這個方式最有效。因為上手不是很難&#xff0c;特此整理 參考鏈接 目錄 1、G…

光伏項目開發合作模式

光伏項目開發合作模式多種多樣&#xff0c;根據應用場景的不同&#xff0c;主要分為戶用光伏項目合作模式和工商業光伏項目合作模式。本文將分別介紹這兩種模式的特點和常見形式&#xff0c;幫助大家更好地了解光伏項目開發的市場運作。 一、戶用光伏項目合作模式 1.用戶全款購…

筆記本電腦內存不夠

筆記本電腦內存不夠是眾多筆記本用戶面臨的常見問題&#xff0c;尤其是對于一些需要處理大型文件或者運行復雜軟件的用戶&#xff0c;這個問題可能會嚴重影響筆記本的使用體驗。那么&#xff0c;我們應該如何解決筆記本電腦內存不夠的問題呢&#xff1f;本文將從幾個方面進行詳…

2024年6月118篇代碼大模型論文最全整理

引言 本文整理了2024年6月全球各大高校與科研機構發布的118篇代碼大模型相關論文。根據論文內容&#xff0c;我們將其整理為基座模型與訓練數據、代碼微調、測試基準、代碼Agent、低資源語言處理、AI代碼安全與分析、人機交互、軟件工程下游任務應用&#xff08;包括代碼生成、…

基于B/S架構+java語言+ 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊

基于B/S架構java語言 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊 醫院產科信息管理系統&#xff1a;標準化對接是一個涉及多個方面的復雜過程&#xff0c;旨在通過數字化手段提升產科管理的效率與質量&#xff0c;實現孕產婦全周期的健康管理…

獲取JWT的token生成時間和過期時間

我用的依賴包如下 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.2.0</version></dependency>token生成時間 Date issuedAt jwt.getIssuedAt(); // 將Date轉換為Instant Instant c…

【9-2:代碼規范】

算法級思想 代碼規范&#xff08;java&#xff09; 代碼規范&#xff08;java&#xff09; 方法參數必須一致&#xff0c;不要出現自動裝箱拆箱操作SimpleDateFormat是線程不安全的使用equals注意空指針異常日志 事務場景中如果出現異常被捕時注意回滾不要再finally中使用retu…

字節碼編程javassist之增加異常捕獲

寫在前面 本文看下如何增加try catch異常捕獲。 1&#xff1a;程序 需要增強的類&#xff1a; public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插樁類 package com.dahuyou.javassist.huohuo.aa;import …

音頻demo:使用faad2將AAC數據解碼出PCM數據

1、README 前言 本demo是使用的開源項目faad2將aac數據解碼成pcm數據。 a. 編譯使用 faad2的編譯&#xff1a;(faad2下載地址&#xff1a;https://sourceforge.net/projects/faac/files/faad2-src/faad2-2.8.0/) tar xzf faad2-2.8.8.tar.gz cd faad2-2.8.8/ ./configure …

【數據結構】單鏈表:數據結構中的舞者,穿梭于理論與實踐的舞池

歡迎來到白劉的領域 Miracle_86.-CSDN博客 系列專欄 數據結構與算法 先贊后看&#xff0c;已成習慣 創作不易&#xff0c;多多支持&#xff01; 一、鏈表的概念和結構 1.1 鏈表的概念 在上一篇文章中&#xff0c;我們了解了線性表(linear list)&#xff0c;并且學習了其…

Spring——IOC創建對象方式

可參考官網&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.htmlhttps://docs.spring.io/spring-framework/reference/core/beans/dependencies/factory-collaborators.html 1. 使用無參構造創建對象&#xff0…

數據庫性能優化系統設計

設計一個數據庫性能優化系統&#xff0c;目標是監測、診斷并改善數據庫的運行效率&#xff0c;確保系統能夠高效穩定地處理大量數據請求。以下是一個概要設計&#xff0c;包括關鍵模塊、功能和實現思路&#xff1a; 1. 系統架構 分布式監控中心&#xff1a;采用分布式架構收集…

C++ STL 協程(Coroutines)

一:什么是協程(Coroutines): 協程是輕量級線程,可以暫停和恢復執行,協程擁有自己的暫停點狀態,協程暫停時,將當前狀態保存起來,在恢復執行時會恢復之前保存的狀態。 二:例子: #include <coroutine> #include <iostream>void doTheWork() {std::cout <…

PHP寶藏神器多功能投票系統源碼小程序

&#x1f389;發現寶藏神器&#xff01;一鍵解鎖“多功能投票小程序”的無限可能? &#x1f308; 開篇安利&#xff1a;告別繁瑣&#xff0c;擁抱高效&#xff01; Hey小伙伴們&#xff0c;是不是經常為組織活動、收集意見而頭疼不已&#xff1f;&#x1f92f; 今天就要給大…

【理解STL】

目錄 一、STL的概念1、STL的定義2、STL的組成 二、容器1、容器的定義及作用2、string類&#xff08;非容器&#xff09;3、vector容器4、set容器5、queue容器6、priority_queue容器7、stack容器8、deque容器9、map容器10、pair容器11、bitset容器12、map和set的區別13、vector和…

Node 中基于 Koa 框架的 Web 服務搭建實戰

前言 在《Node之Web服務 - 掘金 (juejin.cn)》一文中,我們使用 HTTP 模塊構建了后端接口,從而實現了后端服務的開發。可以對此進行進一步優化 http模塊代碼回顧 const http require("http");const server http.createServer((req, res) > {if (reqUrl.pathna…

Python前沿技術:機器學習與人工智能

Python前沿技術&#xff1a;機器學習與人工智能 一、引言 隨著科技的飛速發展&#xff0c;機器學習和人工智能&#xff08;AI&#xff09;已經成為了計算機科學領域的熱門話題。Python作為一門易學易用且功能強大的編程語言&#xff0c;已經成為了這兩個領域的首選語言之一。本…

【零基礎】學JS

喝下這碗雞湯 “知識就是力量。” - 弗朗西斯培根 1.三元運算符 目標:能利用三元運算符執行滿足條件的語句 使用場景:其實是比if雙分支更簡單的寫法&#xff0c;可以使用三元表達式 語法&#xff1a;條件 ? 滿足條件的執行代碼 : 不滿足條件執行的代碼 接下來用一個小案例來展…