Я пытаюсь присоединиться к каналу присутствия (Publi c каналы работают хорошо), но я не могу заставить это работать:
Vue код:
mounted(){
Echo.join('game.' + "0").here((users) => {
alert("In the channel!");
})
.joining((user) => {
console.log("Someone entered");
})
.leaving((user) => {
console.log(user.name);
})
.listen('GameEvent', (e) => {
console.log("Hey")
});
Echo.channel('NewSentence')
.listen('NewSentence',(sentence)=>{
alert("HOLA");
});
}
Я пытаюсь присоединиться к каналу "game.0". Поскольку я использую Laravel Passport, мне нужно аутентифицировать себя с помощью токена, и это работает. Отправка запроса авторизации для Laravel Echo возвращает ключ, но события JavaScript не вызывают .here()
, .listening()
....
Функция загрузки поставщика BroadcastService:
public function boot() {
Broadcast::routes(["middleware" => "auth:api"]);
require base_path('routes/channels.php');
}
каналов. php
Broadcast::channel('game.0', function ($user,$id) {
return ['id' => $user->id];
});
Маршрут аутентификации:
Route::post('/broadcasting/auth', function(Request $request){
$pusher = new Pusher\Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
array(
'cluster' => env('PUSHER_APP_CLUSTER'),
'useTLS' => false,
'host' => '127.0.0.1',
'port' => 6001,
'scheme' => 'http',
)
);
return $pusher->socket_auth($request->request->get('channel_name'),$request->request->get('socket_id'));
});
Do I нужно сделать что-то дополнительно, чтобы это работало? Это запрос авторизации:
РЕДАКТИРОВАТЬ: GameEvent event:
class GameEvent implements ShouldBroadcastNow {
use Dispatchable, InteractsWithSockets, SerializesModels;
public $gameEvent;
public $gameId;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($gameEvent, $gameId) {
//
$this->gameEvent = $gameEvent;
$this->gameId = $gameId;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\PresenceChannel|array
*/
public function broadcastOn() {
//return new PrivateChannel('channel-name');
return new PresenceChannel('game.0');
}
public function broadcastWith() {
return $this->gameEvent;
}
}
РЕДАКТИРОВАТЬ:
Я жестко закодировал имена: 'game.0' теперь жестко закодирован на маршруте routes/channels.php
, в подключении Echo и в GameEvent , Я также удалил broadcastAs()
. После входа в панель отладки laravel -websockets я обнаружил, что канал, на который я хочу подписаться, даже не появляется. Похоже, он не установит соединение, но я не могу понять, что это происходит.
Я жестко закодировал