第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Laravel echo 不接收事件

Laravel echo 不接收事件

PHP
SMILET 2021-11-26 14:59:38
我正在使用 Laravel Echo 和 React Native 在我的移動應用程序中實現(xiàn)實時。我遵循了文檔,但無論如何它都不起作用。我使用 Redis 驅動程序廣播我的事件,Laravel-echo-server 用于 Socket.io 服務器和 Socket.io-client 在客戶端偵聽事件。在 Redis 端,一切似乎都運行良好,因為通過“redis-cli monitor”命令,事件寫得很好。在 Laravel-echo-server 端,一切看起來也不錯,因為當我觸發(fā)事件時我的日志中有這個(所以我假設用戶成功加入了頻道):[2:54:48 PM] - Eri_5PZDB5gkvShrBBBH authenticated for: private-App.User.4016[2:54:48 PM] - Eri_5PZDB5gkvShrBBBH joined channel: private-App.User.4016Channel: ami_database_private-App.User.4016Event: App\Events\UpdateRequest除了我沒有在客戶端觸發(fā)事件并且我在 Chrome 開發(fā)控制臺中沒有任何內容。我還檢查了“WS”部分中的“網絡”選項卡,同樣,沒有顯示任何內容。我已經嘗試了針對論壇不同主題提出的所有解決方案,但沒有任何改變以下是我在事件中定義頻道的方式(我的班級實現(xiàn)了 ShouldBroadcast):public function broadcastOn(){    return new PrivateChannel('App.User.' . $this->receiver->id);}這就是我觸發(fā)事件的方式:我正在使用 AWS 的 EC2 和 Elasticacheevent(new UpdateRequest($receiver));// I also tried this onebroadcast(new UpdateRequest($receiver));這是我在 laravel-echo-server.json 文件中的配置{    "authHost": "<MY_EC2_IP>:80",    "authEndpoint": "/broadcasting/auth",    "clients": [        {            "appId": "<appId>",            "key": "<key_id>"        }    ],    "database": "redis",    "databaseConfig": {        "redis": {            "port": 6379,            "host": "<MY_ELASTICACHE_REDIS_ENDPOINT>"        },        "sqlite": {            "databasePath": "/database/laravel-echo-server.sqlite"        }    },    "devMode": true,    "host": null,    "port": "6001",    "protocol": "http",    "socketio": {},    "secureOptions": 67108864,    "sslCertPath": "",    "sslKeyPath": "",    "sslCertChainPath": "",    "sslPassphrase": "",    "subscribers": {        "http": true,        "redis": true    },    "apiOriginAllow": {        "allowCors": false    }}在客戶端,以下是我在 React Native 應用程序中使用 echo 的方式:(我將主機定義為我的 EC2 實例的 IP,因為我在其上運行 Laravel-echo-server)export const echo = new Echo({      broadcaster: 'socket.io',      host: `http://${MY_EC2_IP}:6001`,      client: Socketio,      auth: {        headers: {          Accept: 'application/json'        }      }})
查看完整描述

2 回答

?
jeck貓

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

我找到了解決我的問題的方法!


事實上,我只是沒有正確查看 Laravel-echo-server 發(fā)出的日志。


[2:54:48 PM] - Eri_5PZDB5gkvShrBBBH authenticated for: private-App.User.4016

[2:54:48 PM] - Eri_5PZDB5gkvShrBBBH joined channel: private-App.User.4016

Channel: ami_database_private-App.User.4016

Event: App\Events\UpdateRequest

如果仔細觀察,我的用戶加入了頻道,private-App.User.4016因為這部分是由 Laravel Echo 在客戶端管理的。


但是如果我們看下面兩行,我們會看到當我的事件被觸發(fā)時,它會在通道上發(fā)布,ami_database_private-App.User.4016因為這部分是由 Laravel 管理的,并且默認情況下會為 Redis 條目添加前綴。


只需轉到該config/database.php文件并編輯以下代碼:


'redis' => [


        // ...


        'options' => [

            'cluster' => env('REDIS_CLUSTER', 'predis'),

            'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',

        ],


        // ...


    ],


'redis' => [


        // ...


        'options' => [

            'cluster' => env('REDIS_CLUSTER', 'predis'),

            'prefix' => '',

        ],


        // ...


    ],

這樣,Laravel 就沒有在他發(fā)布事件的頻道名稱前加上前綴,一切都恢復正常!


希望能幫助到你 !


查看完整回答
反對 回復 2021-11-26
?
POPMUISE

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

您也可以將此前綴添加為 MIX_ 環(huán)境變量,或將其添加到前端和后端項目的管道環(huán)境中,并將其附加到通道或編寫名為 echoListen('channel-name') 的包裝函數(shù),該函數(shù)返回回聲實例。


 const echoPrivate = (channel) => {

  return new Echo({

...options

}).private(process.env.MIX_CHANNEL_PREFIX + channel); 

 };

 

  const echoChannel = (channel) => {

  return new Echo({

...options

}).channel(process.env.MIX_CHANNEL_PREFIX + channel); 

 };

 

 export {

  echoPrivate,

  echoChannel,

 };


查看完整回答
反對 回復 2021-11-26
  • 2 回答
  • 0 關注
  • 335 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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