我正在尝试使用 redis/socket.io 为我的项目实现 Laravel Echo,一切看起来都不错,但用户无法在浏览器中收听事件,也没有收到任何错误。
这是客户端代码:
import Echo from 'laravel-echo';
window.io = require('socket.io-client');
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001',
});
Echo.channel('goals')
.listen('GoalProcessed', event => console.log(event));
这是活动类
<?php
namespace App\Events;
use App\Models\Goal;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class GoalProcessed implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $goal;
public function __construct(Goal $goal)
{
$this->goal = $goal;
}
public function broadcastOn()
{
return new Channel('goals');
}
}
routes/web.php
Route::get('/', function (){
event(new \App\Events\GoalProcessed(Goal::query()->first()));
});
routes/channel.php
Broadcast::channel('goals', function ($user) {
return true;
});
.env
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:T5//n2w8CQ4hHbDu+5AfTi67ShJ4bbxZdL0j9flAP/U=
APP_DEBUG=true
APP_URL=http://project.test
LOG_CHANNEL=stack
LOG_LEVEL=debug
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=project
DB_USERNAME=root
DB_PASSWORD=
BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120
MEMCACHED_HOST=127.0.0.1
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
laravel-echo-server 的响应: enter image description here