我的 laravel echo 有问题,我使用 Pusher,这些东西打印在我的日志上
laravel-echo.js:2567 POST http://localhost:3000/broadcasting/auth 404 (Not Found)
这就是我在前端使用私有的方式
var echo_to = `chat.{{ Auth::user()->id }}`;
console.log(echo_to);
window.Echo.private(echo_to)
.listen('ChatEvent', (e) => {
console.log(e);
});
这是我发送聊天的活动
class ChatEvent implements ShouldBroadcastNow
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $chat;
public $id;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Chat $chat, int $id)
{
$this->chat = $chat;
$this->id = $id;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
Log::info("Send to private: chat.{$this->id}");
return new PrivateChannel('chat.' . $this->id);
}
}
已成功发送,因为在我的laravel.log中打印了
[2023-09-02 18:38:45] local.INFO: Send to private: chat.2
[2023-09-02 18:41:12] local.INFO: Send to private: chat.2
[2023-09-02 18:44:26] local.INFO: Send to private: chat.2
[2023-09-02 18:54:09] local.INFO: Send to private: chat.2
[2023-09-03 06:44:21] local.INFO: Send to private: chat.2
[2023-09-03 06:44:21] local.INFO: Send to private: chat.2
[2023-09-03 06:44:21] local.INFO: Send to private: chat.2
[2023-09-03 06:44:41] local.INFO: Send to private: chat.2
[2023-09-03 07:21:50] local.INFO: Send to private: chat.2
[2023-09-03 07:22:27] local.INFO: Send to private: chat.2
[2023-09-03 07:22:37] local.INFO: Send to private: chat.2
[2023-09-03 07:22:44] local.INFO: Send to private: chat.2
[2023-09-03 07:22:45] local.INFO: Send to private: chat.2
[2023-09-03 07:24:50] local.INFO: Send to private: chat.2
这是加载 echo 的 laravel-echo.js
import Echo from 'laravel-echo';
window.Pusher = require("pusher-js")
console.log("ENV: " + process.env.MIX_PUSHER_APP_KEY, process.env.MIX_PUSHER_APP_CLUSTER);
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true
});
我也有 laravel-echo-server.json
{
"authHost": "http://localhost",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "f22ac84fbeaf11ea",
"key": "24ef3a97bef7f1451fc74dfe6eba46c7"
}
],
"database": "redis",
"databaseConfig": {
"redis": {},
"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": true,
"allowOrigin": "http://localhost:8000",
"allowMethods": "GET",
"allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
}
}
我已经为此设置了我的环境
BROADCAST_DRIVER=pusher
如果您发现我遇到的问题,请告诉我...
终于找到问题了,我已经指定了channels.php
<?php
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Broadcast;
/*
|--------------------------------------------------------------------------
| Broadcast Channels
|--------------------------------------------------------------------------
|
| Here you may register all of the event broadcasting channels that your
| application supports. The given channel authorization callbacks are
| used to check if an authenticated user can listen to the channel.
|
*/
Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Broadcast::channel('chat.{id}', function ($user, $id) {
return true;
});
但是在我的app.php中,它看起来像这样
//App\Providers\BroadcastServiceProvider::class,