亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用Laravel WebSockets通過Laravel中的WebSocket將消息從客戶端

如何使用Laravel WebSockets通過Laravel中的WebSocket將消息從客戶端

PHP
海綿寶寶撒 2022-08-05 09:49:29
WebSocket允許雙向通信:服務器可以向瀏覽器發送消息,瀏覽器 - 客戶端 - 可以通過相同的連接進行響應。我正在 Laravel 6 中實現聊天應用程序:使用:Laravel Echo JavaScript Package (不是 laravel-echo-server),Laravel WebSocketspusher-js.我已經知道服務器觸發事件,客戶端按如下方式偵聽這些事件。安裝 Laravel WebSockets 軟件包。composer require beyondcode/laravel-websockets配置。config/broadcasting.php        'pusher' => [            'driver' => 'pusher',            'key' => xxx,            'secret' => xxx,            'app_id' => xxx,            'options' => [                'cluster' => xxx,                'encrypted' => true,                'useTLS' => true,                 'host' => '127.0.0.1',                'port' => 6001,                'scheme' => 'https',            ],        ],    ]配置config/websockets.php'apps' => [        [            'id' => xxx,            'name' => xxx,            'key' => xxx,            'secret' => xxx,            'enable_client_messages' => true,            'enable_statistics' => true,        ],    ],安裝服務器。Pushercomposer require pusher/pusher-php-server "~3.0"將廣播驅動程序設置為在文件中使用。pusher.envBROADCAST_DRIVER=pusher使用和在我的客戶端。laravel-echopusher-jsimport Echo from "laravel-echo"window.Pusher = require('pusher-js');window.Echo = new Echo({    broadcaster: 'pusher',    key: 'your-pusher-key',    wsHost: window.location.hostname,    wsPort: 6001,    disableStats: true,});啟動 WebSockets 服務器。php artisan websockets:serve在服務器端,使用實現類的事件類觸發事件。ShouldBroadcastNowevent(new MyEventClass((object)$message));一切都很好。在步驟 8 中,我從服務器端觸發事件。請注意,我沒有使用官方的Pusher服務器,我只是利用Puster API實現,而是指向步驟6中配置的本地。pusher-jsLaravel Echo JavaScript packageLaravel WebSockets server請不要混淆 。我沒有使用.Laravel Echo JavaScript packagelaravel-echo-serverSocket.IO ServerSocket.IO Server現在,我不想像步驟 8 中所示在服務器端觸發事件,而是希望從客戶端觸發事件,因為 WebSocket 允許雙向通信。我怎樣才能做到這一點, ?LaravelLaravel Echo JavaScript PackageLaravel WebSockets PHP package
查看完整描述

4 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

請參閱此文檔:https://pusher.com/docs/channels/using_channels/events#triggering-client-events


根據推送器文檔,使用此按鈕初始化前端


 this.echo = new Pusher('mykey', {

    wsHost: 'localhost',

    wsPort: 6001,

    forceTLS: false,

    disableStats: true,

    enabledTransports: ['ws', 'wss']

  });

用它來觸發您的事件


var channel = this.echo.subscribe("private-channel");

channel.bind("pusher:subscription_succeeded", () => {

var triggered = channel.trigger("client-someEventName", {

   your: "data",

 });

});


查看完整回答
反對 回復 2022-08-05
?
慕后森

TA貢獻1802條經驗 獲得超5個贊

我可能不正確,但我不相信你可以用他們的包裹推到Puster。這就是作曲家包的用途。pusher-jspusher-php-server

可能有一個節點包可以做到這一點,但你為什么要嘗試重新發明輪子呢?只需使用 axios 或 Vuex 操作發布到您的某個路由以觸發事件,然后讓 Echo 拾取響應。

您甚至不需要創建控制器,只需使用路由閉合并觸發事件即可。Axios 或 Vuex 都將返回一個 Promise,以便您可以管理組件或 Vuex 操作中響應的等待。

我可以理解,如果你試圖實現一個不同類型的驅動程序來廣播,比如RabbitMQ或Rachet之類的,但它被設計成一個循環的循環,從js擊中你的端點,從PHP觸發事件,讓Puster/或websockets做它的事情,在js中接收你的廣播。


查看完整回答
反對 回復 2022-08-05
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

初始化Echo后,您需要在前端的某個通道上進行偵聽。我將展示一些 Vue 代碼,但會相應地進行修改:


Vue File


export default {

    methods: {

        sendCommand(command) {

            axios.post('/api/command', { 'command': command })

            .then((res) => {

                //

            })

        }

    },

    mounted() {

        Echo.channel('xxx')

        .listen('.weight-change', (e) => {

            this.weight = e.weight

        })

    }

}

在這里,您可以看到所有傳入消息都在代碼的偵聽部分捕獲,并且使用后端的 api 路由發送新消息,該路由將它們發送到 Echo 通道。


如果您需要任何澄清,請告訴我。


查看完整回答
反對 回復 2022-08-05
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

對于可能面臨此問題的每個人。


您不需要回聲,應直接從推桿實例化


const my_pusher = new Pusher("APP_KEY", {

        cluster: 'mt1',

        wsHost: window.location.hostname,

        wsPort: 6001,

        forceTLS: false,

        disableStats: true,

    });

并向服務器發送消息:


my_pusher.send_event('EVENT_NAME',{'ANYTHING':'YOU_WANT'})


查看完整回答
反對 回復 2022-08-05
  • 4 回答
  • 0 關注
  • 231 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號