成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院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號
美女高潮无套内谢| 看国产黄大片在线观看| 精产国品一二三产品区别视频手机 | FREE嫩白18SEⅩ性HD处| 成人AV毛片无码免费网站| 夫前人妻被灌醉侵犯在线| 国产美女精品视频线免费播放软件 | 国产亚洲人成在线播放| 久久97精品久久久久久久不卡| 老师抱着我在教室做| 欧美爽到高潮漏水大喷视频| 日韩无码视频一区二区三区| 婷婷久久综合九色综合| 亚洲精品国产情侣AV在线| 一区二区精品视频日本| JAPANESE高潮尖叫| 国产成年无码久久久久下载| 好男人好资源神马在线观看| 狼人青草久久网伊人| 人人妻人人超人人| 午夜精品久久久久9999| 亚洲一级无码av毛片www| 97人妻精品一区二区三区| 公交车大龟廷进我身体里视频| 国产真人无码作爱免费视频APP| 久久久久亚洲精品无码网址| 强行糟蹋人妻HD中文字幕| 无码人妻精品一区二区三区在线 | 亚洲一卡2卡3卡4卡精品分类| 99RIAV国产精品视频| 给丰满丁字裤少妇按摩到高潮 | 欧美性生交XXXXX久久久| 色悠久久久久综合欧美99| 亚洲成亚洲乱码一二三四区软件| 中文字幕亚洲综合久久2020| 高清VIDEOSDESEXO日| 精品少妇人妻AV一区二区| 欧美最猛黑人XXXⅩ猛男无码| 无码专区久久综合久中文字幕| 夜夜爽妓女8888视频免费观看| 把腿张开老子cao烂你动态图| 国产亚洲AV人片在线观看| 毛片无码免费无码播放| 色综合AV男人的天堂伊人| 亚洲熟妇V一区二区三区色堂| 被公牛日到了高潮| 激情偷乱人伦小说视频最新章节| 欧美乱大交XXXXX| 亚洲 自拍 另类 欧美 综合| 97超碰中文字幕久久精品| 国产日韩未满十八禁止观看| 男女无遮挡XX00动态图120| 国产97色在线 | 日韩| 精品少妇人妻AV一区二区| 日韩Av一区二区三区| 亚洲欧美综合一区二区三区| JAVAPARSER少妇高潮| 狠狠色噜噜狠狠狠狠AV不卡| 人妻av一区二区三区精品| 亚洲国产精品一区二区久久| 成人免费一区二区三区视频软件| 久久国产精品77777| 少妇人妻好深好紧精品无码| 幼射HD交中国妇| 国产精品无码一区二区在线| 欧美成人午夜视频| 亚洲成AV人片在线观看不卡| 成本人H无码播放私人影院| 久久国产乱子伦精品免费女人| 少妇AV一区二区三区无码| 中国熟妇老熟女妓女9| 国产美女极度色诱视频WWW| 欧美在线视频一区二区| 亚洲欧美日韩另类| 国产成人久久AV免费看| 欧美人妻AⅤ中文字幕| 亚洲欧美另类日本| 国产成人无码AV一区二区 | 99RE热这里只有精品视频| 近親五十路六十被亲子中出 | 2021国产手机在线精品| 果冻传媒一区二区天美传媒| 日本在线视频WWW鲁啊鲁| 中国人妻被两个老外三P| 国产真人无码作爱视频免费| 色五月丁香五月综合五月4438| √天堂资源在线中文8在线最新版| 国内自产少妇自拍区免费| 色国产精品一区在线观看| 337P西西人体大胆瓣开下部| 精品人妻伦一二三区久久| 玩弄老太太的BB| 草莓视频在线播放视频| 免费无码的AV片在线观看| 亚洲精品无码午夜福利中文字幕 | 蜜桃AV不卡无码三区| 亚洲精品无码专区在线| 国产精品无码无片在线观看| 日韩一卡2卡3卡4卡| 99精品久久久久久久婷婷| 久久久久久久无码高潮| 亚洲AV无码无在线观看红杏| 国产成人无码A区视频在线观看| 人妻精品久久久久中文字幕一冢本| 制服 丝袜 亚洲 中文 综合| 久久se精品一区二区| 亚洲AV无码一区二区二三区下载| 国产成人综合亚洲AV| 日韩午夜无码精品试看| 啊灬啊灬啊灬高潮了视频 | 九月九电影免费观看| 亚洲AⅤ天堂AV天堂无码麻豆 | JLZZZJLZZZ国产免费观| 免费无码又爽又刺激毛片| 夜里18款禁用B站大全| 精品人妻Av乱码一区二区| 亚洲AV老熟妇在线观看| 国产精品无码免费专区午夜 | 一本一道久久A久久精品综合| 韩漫画免费网站在线观看| 我和闺蜜在KTV被八人伦| 国99久9在线 | 免费| 少妇人妻好深好紧精品无码| 多毛BGMBGMBGM胖在| 日韩内射美女片在线观看网站| 超碰97人人做人人爱可以下载 | 免费无遮挡禁18污污网站 | 蜜臀AV网站在线观看| 在线观看国产成人AⅤ天堂| 可以C女性角色的游戏手游| 艳MU无删减在线观看免费无码| 久久精品人妻系列无码专区| 亚洲在AV极品无码高清| 久久久久女教师免费一区| 夜夜骚Av一区二区精品无码区| 久久夜色精品国产欧美乱| 真实的国产乱ⅩXXX66小说| 美女裸体无遮挡免费视频| 2023年新番肉食系| 欧美丰满熟妇BBB久久久| AV无码久久久久不卡蜜桃| 人妻人妇人妻一区二区三区 | 色欲色香天天天综合VVV| 国产成人精品视频网站| 午夜内射高潮视频| 激情无码白丝人妻又大又粗| 亚洲中文字幕无码中文字| 麻豆国产精品VA在线观看| 97人妻人人做人碰人人爽| 人妻丰满熟妇无码区yeezy| 丁香五月缴情网站| 无码人妻AⅤ一区二区三区夏目| 国产偷V国产偷V亚洲高清学生| 亚洲国产成人精品无码区花野真一 | 亚洲A∨国产AV综合AV网站| 精品久久久久久无码专区不卡| 亚洲国产日韩A在线播放| 亚洲日本中文字幕乱码在线| 精品深夜AV无码一区二区老年| 亚洲色丰满少妇高潮| 鲁丝一区二区三区免费| 99热成人精品热久久6网站| 人人妻人人藻人人爽欧美一区| 国产69久久精品成人看| 亚洲 欧洲 日韩 综合二区 | 洗澡被公强奷30分钟视频| 精品人人妻人人澡人人爽人人| 岳今晚让我玩个够肥水一体探岳体 | 野花香HD免费高清版6高清版| 男生听到女生喘气是什么心理现象| 班主任掀开裙子让我桶的| 天天摸日日摸狠狠添| 精品国产国偷自产在线观看| 在线播放亚洲第一字幕| 日本少妇情视频WWW| 国产美女裸体无遮挡免费视频| 亚洲日韩国产精品无码AV| 女性裸体无遮挡啪啪网站| 东京热人妻无码人AV| 亚洲AV无码一区二区三区天堂| 鲁一鲁一鲁一鲁一澡| 成人无码区免费AⅤ片黄瓜视频 | 色噜噜人妻av无码| 韩漫无遮漫画全集观看| 中国老太太BBVBBⅤ| 国产精品免费AⅤ片在线观看| 人妻办公室出轨上司HD院线| 丰满少妇A级毛片野外| 亚洲国产成人极品综合| 女人被狂躁的高潮免费视频| 国产成人无码区免费A∨视频网站| 亚洲欧洲成人AV电影网| 人妻丰满熟妇AⅤ无码| 国精产品一区一区三区M| 鲁丝一区二区三区| 免费观看电视剧全集在线播放| AV天堂久久天堂色综合| 无码免费一区二区三区| 久久天天躁狠狠躁夜夜爽 | 成 人 黄 色 网 站 在线播|