#php #laravel #vue.js #pusher #laravel-echo
Вопрос:
Последние два дня я застрял на одном и том же. Я перепробовал все возможные решения, но безуспешно. Пожалуйста, проверьте мой приведенный ниже код и укажите мне, где я ошибаюсь.
Ошибка
Pusher : : [«Recd события»,{«событие»:»pusher_internal:подписка завершена»,»канал»:»приватный чат»,»данные»:{}}]
Pusher : : [«Нет обратных вызовов в приватном чате для pusher:подписка завершена»]
Событие
class NewMessageNotification implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Messages $message)
{
$this->message = $message;
}
/**
* Get the channels the event should broadcast on.
*
* @return IlluminateBroadcastingChannel|array
*/
public function broadcastOn()
{
return new PrivateChannel('chat');
}
public function broadcastAs()
{
return 'messageSent';
}
}
Контроллер
public function store(Request $request)
{
$message = new Messages;
$message->to = $request->input('to');
$message->from = $request->input('from');
$message->message = $request->input('message');
$message->save();
broadcast(new NewMessageNotification($message));
}
bootstrap.js
import Echo from "laravel-echo";
window.Pusher = require("pusher-js");
window.Echo = new Echo({
broadcaster: "pusher",
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true
});
Pusher.logToConsole = true;
прослушиватель в файле vue
created() {
// this.getMessages();
window.Echo.connector.pusher.connection.bind("connected", () => {
console.log("connected");
});
window.Echo.private(`chat`).listen("messageSent", e => {
console.log(e);
});
},
Комментарии:
1. Поделитесь своими routes/channels.php, вам необходимо аутентифицировать свои личные каналы. Я предполагаю, что вы получаете несанкционированный доступ к консоли.
2. @АлиРаза
Broadcast::channel('chat', function () { return auth()->check(); });
3. верните значение TRUE для тестирования, также убедитесь, что ключи process.env разрешены правильно. Также для тестирования попробуйте жестко кодировать клавиши-толкатели и проверьте, есть ли проблема.
4. По мере того, как клиент получает
pusher_internal:subscription_succeeded
событие, он будет успешно подписываться на канал. Ошибка указывает на то, что у клиента нет обработчика для получения этого события. Мое решение, приведенное ниже, должно подавить это.5. @AliRaza нет, это не работает
Ответ №1:
Эта ошибка не должна мешать подписке, но, конечно, вы не хотели бы, чтобы она отображалась в консоли. Чтобы остановить это, вы можете добавить обработчик для события следующим образом:
window.Echo.private(`chat`).listen("pusher_internal:subscription_succeeded", () => {
console.log('Successfully subscribed to private-chat);
});
Комментарии:
1. Я также не могу выслушать ответ от толкателя.