成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

教你用laravel-websockets搞個“低配”廣播系統

本篇文章給大家帶來了關于Laravel的相關知識,其中主要介紹了怎么用laravel-websockets來實現一個“低配版”廣播系統,感興趣的朋友一起來看一下吧,希望對大家有幫助。

教你用laravel-websockets搞個“低配”廣播系統

前言

網上找了好幾個教程都沒成功,然后死磕一個教程不斷研究最終成功了。然后就寫了這篇教程,希望能幫到跟我一樣笨的人。另外希望不要誤導到讀者。希望讀者最好不要過于信任我的這個教程。我其實是稀里糊涂地成功的,我的這個教程可能也有坑。還有一點是我覺得我研究的過程好像收獲挺大的,如果時間充裕的話建議自己研究。

教程的開頭我先大致介紹一下我是怎么搞出這個教程介紹的方法的。我建議看教程的人重視一下這部分,因為我懷疑 Laravel 或者相關的庫一更新可能又會出現不兼容或者錯亂的情況,然后就又有問題了。到時候可能就需要讀者自行研究了。

為什么說是大致介紹呢,因為很多地方我感覺都是我瞎貓碰死耗子蒙出來的。另外可能需要一些無法言說的經驗吧。

盡量縮小實驗的對象的規模,找步驟少的教程

剛開始我是照著官方文檔中文版做的,后來發現這個實在是太復雜了,可能錯一步就會失敗。而且有的時候連錯誤提示也沒有,就算有錯誤提示不是搜不到就是有太多回答完全不一樣的問題。如果盡量縮小規模的話,應該就能盡量少踩點坑了。

將任務分解得可以獲得子任務成功的反饋

剛開始我是一步一步跟著做,然后最后看是否成功,后來發現這種方法太低效了。然后我發現某些子步驟是可以通過一些方法判斷是否成功的,比如 laravel-websockets 安裝成功之后能打開那個 dashboard。就是 /laravel-websockets 。另外還有發送廣播的代碼如果成功了的話可以在前面說的那個 dashboard 里看到效果。最后就是全部成功就能在瀏覽器里看到效果了。所以后來我如果當前階段沒有成功就不會繼續做下去了,繼續研究本階段哪里錯了。

多打 Log

我是通過打 Log 發現客戶端的 Echo 根本沒有初始化成功的,因為少個參數。之前好像也有個錯誤提示,但是我好像沒看懂。通過在初始化 Echo 的前后分別輸出兩條不一樣的 Log,我發現只有前一條執行了,后一條根本沒執行,所以得出了程序遇到錯誤就停止執行了的結論。

對被實驗的對象盡量熟悉起來

比如我沒搜索到某條報錯的相關信息。但是后來發現里面的某個詞在配置里出現過,改了一下那個配置就好了。就是這個:“Uncaught Options object must provide a cluster”。不過后來我在網上發現個跟我一樣的方法,沒準我之前看過那個方法,可能是因為樓主說沒用所以我就沒試。

多綜合各方信息,特別是那些成功的

雖然不一定能拿來就用,甚至可能會產生誤導,但是我相信信息多一些還是更有助于解決問題的。比如我就在嗶哩嗶哩上搜過“laravel 廣播”看過幾個視頻。還搜索了一些非官方文檔的教程。

如果搜錯誤提示沒有用的東西或者搜索結果太多就看看代碼

不過我感覺這條有用的概率不大,實在沒招了再用吧。我是通過這個方法發現我在取消注釋代碼的時候少取消注釋了一行,然后出現了很奇怪的錯誤提示。

就算成功了也不要高興得太早,多練習幾遍

步驟越多越容易出問題,這個廣播系統的步驟是真多。多練習也能多熟悉一點。

盡量選擇更新的教程

我一般在搜索引擎里加個一年內的條件。

面向搜索引擎編程

感覺這次大概有一半以上的問題都是通過搜索引擎解決的吧,完全自己解決的部分好像很少。

本體

我這個教程某些方面比較啰嗦,是從創建項目開始的,另外還提到了配置數據庫。水平比較高的讀者可以忽略一些內容。至于高端的讀者應該用不著看我的這種東西。不過我對命令的介紹基本沒有,有需求建議去看下面的英文文章。
備忘

我這個是公共頻道的。還有隊列用的是默認的 sync,據說只能用于開發環境。總之我這個教程應該是挺殘廢的,但是跑通了應該就可以以此為起點根據官方文檔實驗新的配置和添加新的功能了。

我的這個教程主要參考自這篇文章:How to use Laravel WebSockets。

創建項目

在 Apache24htdocs 或者類似的地方運行下面的命令:

composer create-project laravel/laravel bc
登錄后復制

在項目路徑中運行以下命令:

php artisan serve
登錄后復制

注意運行完上面的命令當前命令行窗口一般就不能運行命令了,需要重啟一個命令行窗口。想要在繼續在當前命令行窗口運行命令除非配合后臺運行的命令。

配置數據庫信息

在配置數據庫之前需要創建一個數據庫,我用的是 test。不過就算不創建在 migrate 的時候也會提示創建。這個差點就忘了,因為之前一直沒有刪除這個數據庫。

.env

DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=testDB_USERNAME=rootDB_PASSWORD=1234
登錄后復制

注意要填你的數據庫的實際的信息,別照抄我的配置。

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

在項目路徑中運行以下命令:

composer require beyondcode/laravel-websockets php artisan vendor:publish --provider="BeyondCodeLaravelWebSocketsWebSocketsServiceProvider" --tag="migrations"php artisan migrate php artisan vendor:publish --provider="BeyondCodeLaravelWebSocketsWebSocketsServiceProvider" --tag="config"
登錄后復制

安裝 pusher

在項目路徑中運行以下命令:

composer require pusher/pusher-php-server
登錄后復制

注意這條我跟我參考的那篇文章不一樣,我這個安裝的應該是最新版的。原文好像指定版本了。

配置 Laravel WebSockets

.env

BROADCAST_DRIVER=pusherPUSHER_APP_ID=12345PUSHER_APP_KEY=ABCDEFGPUSHER_APP_SECRET=HIJKLMNOPPUSHER_HOST=127.0.0.1PUSHER_PORT=6001PUSHER_SCHEME=httpPUSHER_APP_CLUSTER=mt1
登錄后復制

注意這里跟我參考的那篇英文文章也不一樣,我強迫癥,感覺改 .env 更優雅一些。畢竟其他地方都會優先讀 .env。感覺 .env 更像是函數,一個地方改動了不用修改所有調用的地方。感覺前一句有點問題,大概就是那個意思吧。

再注意一下第二條到第四條的值是隨便填的。

運行 Laravel WebSockets 服務器

在項目路徑中運行以下命令:

php artisan websockets:serve
登錄后復制

這個也是運行之后當前命令行窗口就不能輸入命令了。【推薦學習:laravel視頻教程】

之后在瀏覽器地址欄輸入 127.0.0.1:8000/laravel-websockets 就能看前面的操作是否成功了。如果你不是通過“php artisan serve”運行的服務器的話可能端口會不一樣。點擊那個 Connect 按鈕如果在 Events 下面出現一些東西應該就是階段性成功了。注意這個網頁在沒那個啥的情況下打開是非常慢的,至少在我這里很慢。因為里面有個 js 庫的下載速度很慢。注意下面的改 blade 模板的行為是可選的!另外我不知道下面的那個 cdn 有沒有問題,畢竟好像不是大廠的 cdn。如果你嫌慢又不想那個啥的話可以將 vendorbeyondcodelaravel-websocketsresourcesviewsdashboard.blade.php 中的

<script  src="https://www.php.cn/link/19e0c9edc141240b5de750fa83ba1bed"></script>
登錄后復制

換成

<script  src="https://cdn.bootcdn.net/ajax/libs/plotly.js/2.17.0/plotly.min.js"></script>
登錄后復制

我是通過用 VS Code 搜索功能直接搜索 cdn.plot.ly/plotly-latest.min.js 搜出來這個文件的。另外是在火狐的開發者工具的網絡中發現這個 js 庫加載速度慢的。另外這種直接改這種地方的文件應該是不太優雅。

創建事件

在項目路徑中運行以下命令:

php artisan make:event NewTrade
登錄后復制

appEventsNewTrade.php

<?php namespace AppEvents;use IlluminateBroadcastingChannel; use IlluminateBroadcastingInteractsWithSockets; use IlluminateBroadcastingPresenceChannel; use IlluminateBroadcastingPrivateChannel; use IlluminateContractsBroadcastingShouldBroadcast;use IlluminateFoundationEventsDispatchable; use IlluminateQueueSerializesModels; class NewTrade implements ShouldBroadcast{     use Dispatchable, InteractsWithSockets, SerializesModels;      public $trade;      /**      * Create a new event instance.      *      * @return void      */     public function __construct($trade)     {         $this->trade = $trade;     }      /**      * Get the channels the event should broadcast on.      *      * @return IlluminateBroadcastingChannel|array      */     public function broadcastOn()     {         return new Channel('trades');     }}
登錄后復制

在項目路徑中運行以下命令:

php artisan tinker
登錄后復制

運行這條命令后會啟動 Laravel 的交互式解釋器,我理解就是輸入一些語句可以直接執行。另外還有一些其他的實用的命令。這個也是運行之后當前命令行窗口就不能輸入正常的系統命令了,但是這個命令行窗口之后要輸入 php 語句。順便說一下,VS Code 里的終端在 tinker 里沒法 Ctrl + V,但是右鍵是粘貼的功能。

然后在上面的執行過 php artisan tinker 的那個命令行窗口運行以下命令:

event (new AppEventsNewTrade('test'))
登錄后復制

登錄后復制

之后就能在上面提到的那個 127.0.0.1:8000/laravel-websockets 頁面看到發出的消息了。能看到的話就說明階段性成功了。

安裝客戶端包 laravel-echo

在項目路徑中運行以下命令:

npm installnpm install --save-dev laravel-echo pusher-js
登錄后復制

resourcesjsbootstrap.js

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,     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'],     cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER,});
登錄后復制

注意這里也跟我參考的那篇英文文章不一樣。我只是取消注釋了那個文件中的那些東西,并在結尾添加了一行“cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER,”。

在項目路徑中運行以下命令:

npm run dev
登錄后復制

這個也是運行之后當前命令行窗口就不能輸入命令了。

添加客戶端腳本

在文件
resourcesviewswelcome.blade.php
的 head 標簽的結尾添加以下代碼:

        @vite('resources/js/app.js')        <script>             window.onload = function(){                 Echo.channel('trades')                 .listen('NewTrade', (e) => {                     console.log(e.trade);                 });             };         </script>     </head>
登錄后復制

注意這里也跟我參考的那篇英文文章不一樣。改了兩處,一個是導入 app.js 的方法換了。另外套了一層 window.onload。

然后在瀏覽器的地址欄輸入 127.0.0.1:8000/ 啟動開發者工具并切換到控制臺標簽頁。然后再在前面運行過 php artisan tinker 的那個命令行窗口中執行以下命令:

event (new AppEventsNewTrade('test'))
登錄后復制

登錄后復制

最后切換到前面提到的開發者工具中的控制臺標簽頁,應該能看到一條“test”消息。能看到就說明最終成功了。

結語

我只是個菜狗,不要問我太復雜的問題。我從開始搞這個廣播系統到最終成功好像用了兩三天的時間,就憑這個時間你應該就能體會到我有多菜了。

最后因為我是菜狗,所以可能會有一些理解上的錯誤,歡迎指出來。不過按照我的這個教程做基本上應該是會成功的。我做完這個教程自己照著又做了兩遍,沒問題。不過也可能會因為我沒注意到一些東西,或者讀者的環境跟我的不一樣導致讀者不成功。所以我也不敢保證。感覺早晚會失效,失效了如果我沒更新的話誰看到了就回復一下提醒一下別人吧。

原文地址:https://learnku.com/articles/74366

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
内射极品少妇一区二区AV| 热99RE6久精品国产首页青柠| 免费一本色道久久一区| 女人和拘做受A级毛片| 人妻被按摩到潮喷中文不卡| 日日噜狠狠噜天天噜AV| 无码日韩人妻精品久久蜜桃| 亚洲AV无码专区里番在线观看| 亚洲人成人无码WWW影院| 中文亚洲AV片不卡在线观看| JK女自慰下面爆浆喷水| 成人性生交大片免费看| 国产日韩一区在线精品| 久久精品国产亚洲精品2020| 欧美成人国产精品视频| 少妇极度饥渴少妇高潮| 亚洲av中文无码| 中文字幕精品一二三四五六七八| 八区精品色欲人妻综合网| 国产成人无码区免费网站| 黑人VIDEODESEXO极品| 麻花传媒MV与其它传媒公司比较| 日本边添边摸边做边爱边| 无码熟妇人妻AV在线影片| 亚洲一级 片内射欧美乱强| AV无码中文一区二区三区四区| 丰满岳乱妇在线观看中字无码| 国精产品W灬源码1688伊| 两人做人爱视频在线观看| 人妻系列无码专区AV在线| 五十路亲子中出在线观看| 野花香社区在线视频观看播放| WWW夜插内射视频网站| 国产精品亚洲成在人线| 久青草无码视频在线观看| 日韩无人区码卡二卡3卡一| 亚洲GV永久无码天堂网| 97性无码区免费| 国产精品美女久久久M| 胯下硕大征服冰山女神| 少妇内射一区27p| 亚洲色偷偷综合亚洲av伊人| 啊灬啊灬高潮来了…视频APP| 国产乱人伦偷精品视频免| 免费精东传媒VS天美传媒| 天天爽天天狠久久久综合麻豆 | 黑人巨大两根一起挤进| 欧美精品18VIDEOS性欧美| 无码人妻AV免费一区二区三区| 在线天堂中文WWW官网| 国产AⅤ激情无码久久| 久久久亚洲熟妇熟一区二区 | 大胸美女污污污WWW网站| 精品无码人妻一区二区三区品| 人妻少妇中文字幕乱码| 亚洲精品成人网线在线播放VA| 边做边爱完整版免费视频播放| 极品女教师波多野结衣电影衣| 日本农村大姐RAPPER| 亚洲熟妇少妇任你躁在线观看无码 | 在线精品国产成人综合| 国产精品第一区揄拍无码| 男人的天堂在线视频| 亚洲AVAV国产AV综合AV| ZZIJZZIJ亚洲日本少妇| 九九国产精品无码免费视频| 少妇午夜福利水多多| 中文字幕亚洲一区二区VA在线 | 亚洲一线产区二线产区区别在哪| 大学生被内谢粉嫩无套| 麻豆果冻传媒新剧国产短视频| 无码H黄肉3D动漫在线观看| AⅤ精品一区二区三区| 精品一区二区AV天堂| 天堂资源在线WWW中文| 99成人国产综合久久精品| 精品国精品无码自拍自在线| 熟女高潮精品一区二区绯乐| ASIAN日本裸体PICS| 精品无人区卡一卡二卡三| 天堂中文在线最新版| AV色蜜桃一区二区三区| 久久国产精品99国产精| 无人区一码一码二码三码区别| 锕锕锕锕锕锕锕锕轻点好疼视频 | 亚洲美女高潮久久久久| 国产精品扒开腿做爽爽爽视频| 欧美一区二区三放荡人妇| 亚洲一线产区二线产区区别在哪 | 久久久久无码专区亚洲AV| 亚洲 都市 无码 校园 激情| 大肉大捧一进一出视频出来呀| 男人一生最吉利的网名| 一本大道AV伊人久久综合| 好爽毛片一区二区三区四| 特级西西人体444WWW高清大| 暴躁老阿姨CSGO攻略大全| 蜜芽VA亚洲VA欧美VA天堂| 亚洲人成网亚洲欧洲无码久久 | 吃瓜黑料视频永久地址| 欧美大屁股XXXX高跟欧美黑人| 亚洲综合无码AV一区二区三区| 狠狠爱天天综合色欲网| 午夜伦4480YY私人影院免费| 国产AV无码专区亚洲版综合| 日本XXXX18裸体XXXX| 99热国产这里只有精品9| 美女露0裸体无档动态视频| 野花高清在线观看免费官网中文版 | 玩小雪跪趴把腿分到最大影视频| 成人无码AV一区二区三区| 亲胸揉屁股膜下刺激视频免费网站| 综合无码一区二区三区 | 少妇被又粗又硬猛烈进出小说| 锕锕锕锕锕WWW湿透了10秒| 妺妺坐在我腿上勃起弄了应用 | 亚洲精品无码日韩国产不卡AV| 国产日韩综合一区二区性色AV| 婷婷蜜桃国产精品| 国产超碰AV人人做人人爽| 色橹橹欧美在线观看视频高清| 成年AV免费网址大全超清| 人妻精品久久久久中文字幕一冢本 | 无码国产伦一区二区三区视频| 国产大学生酒店在线播放| 天堂中文最新版在线官网在线| 国产99久久久国产精品~~牛| 色偷偷色噜噜狠狠成人免费视频| 成人亚洲AV网站在线看AAAA| 日日摸日日踫夜夜爽无码| 丰满人妻无奈张开双腿AV| 色综合亚洲一区二区小说性色AⅤ 色综合天天综合网天天小说 | 久久亚洲精品无码GV| 影音先锋新男人AV资源站 | 真人性囗交69图片| 免费无码久久成人网站| 97丨九色丨国产人妻▌| 欧美性爱视频一二三区| 被带到满是X玩具的房间挑调游戏| 人禽伦免费交视频播放| 粗大挺进尤物人妻中文字幕| 四虎成人精品在永久免费| 国产精品毛片无遮挡| 亚洲AⅤ在线无码播放毛片一线天 亚洲AⅤ优女AV综合久久久 | 99国产亚洲精品美女久久久久| 欧美性巨大╳╳╳╳╳高跟鞋 | 国产又爽又黄无码无遮挡在线观看 | 曰本A级毛片无卡免费视频| 免费人成视频XVIDEOS| CHINESE树林性BBW| 日韩精品无码专区免费视频| 国产成人久久综合第一区| 小13箩利洗澡无码视频网站| 国内精品久久久久精品爽爽| 亚洲日韩亚洲另类激情文学| 兰州熟妇高潮露脸| JIZZJIZZ中国18大学生| 少妇熟女视频一区二区三区| 国产视频一区二区| 野花日本HD免费高清版7| 农村人乱弄一区二区| 成人H动漫无码网站久久| 无人高清视频完整版在线观看| 精品国产AⅤ一区二区三区在线看 精品国产AⅤ一区二区三区V视界 精品国产AⅤ一区二区三区V免费 精品国产AⅤ一区二区三区4区 | BBOX撕裂BASS后门BD| 日韩人妻无码专区精品| 国产精品天干天干在线观看| 亚洲欧美综合区自拍另类| 免费看B站直播APP下载| 成.人.大.片在线观看| 午夜亚洲WWW湿好大| 久久久久国色AV免费看图片| MAC小辣椒877正品| 无码熟妇人妻AV在线影片最多| 精品人妻码一区二区三区| 999久久久精品国产消防器材| 色婷婷AV一区二区三区4k岛国| 国产又色又爽又刺激视频| 在公交上被灌满白浆的视频 | 国产99在线 | 黑人| 亚洲加勒比少妇无码AV| 欧美成人一区二区三区| 高清粉嫩无套内谢国语播放| 亚洲精品午睡沙发系列| 欧美少妇XXXXX| 国产天堂AV手机在线| 又黄又爽又色的视频| 日韩AV高清无码| 精品国产A∨无码一区二区三区| A级毛片无码免费真人久久| 午夜福利1000集无码| 免费A级毛片18禁| 国产精品宾馆在线精品酒店| 玉蒲团2之玉女心经| 色偷偷AV男人的天堂| 久久精品亚洲中文字幕无码网站| 爸的比老公大两倍儿媳叫什么呢| 亚洲AV高潮黄色毛片| 欧美人与人动人物2020| 国语对白国产成人AⅤ片|