По какой-то причине я не могу получать какие-либо данные на моей стороне клиента из laravel echo. Я использую laravel-echo-server (socket.io), redis broadcaster и redis queues. Насколько я могу судить, все они функциональны. Я расскажу вам, как настроить его для тестирования. Сначала я создал событие UserCreated:
class UserCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
public function broadcastOn()
{
return new Channel('user-created');
}
public function broadcastAs()
{
return 'user.created';
}
}
Затем, чтобы проверить это событие, я создал команду CreateUser:
class CreateUser extends Command
{
protected $signature = 'create:user {username}';
protected $description = 'Create a new user!';
public function __construct()
{
parent::__construct();
}
public function handle()
{
$user = \Chatter\User::create([
'name' => $this->argument('username'),
'email' => uniqid() . '@gmail.com',
'password' => bcrypt('secret')
]);
event(new \Chatter\Events\UserCreated($user));
}
}
Наконец, вот мой laravel-echo-server.json:
{
"authEndpoint": "/broadcasting/auth",
"authHost": "chatter.dev",
"database": "redis",
"databaseConfig": {
"redis": {
"port": "6379",
"host": "localhost"
}
},
"port": 6001,
"protocol": "http",
"sslCertPath": "",
"sslKeyPath": "",
"socketio": {}
}
Затем я запустил php artisan queue:listen
и laravel-echo-server start
. Они оба побежали без ошибок.
Чтобы убедиться, что сервер работал, я сделал php artisan create:user Bob123
.
Это было успешно. Очередь вернула это (в консоли):
[2017-06-01 01:28:27] Processing: Chatter\Events\UserCreated
[2017-06-01 01:28:27] Processed: Chatter\Events\UserCreated
И laravel-echo-server вернул это (в консоли):
CHANNEL user-created
Итак, чтобы получить данные, отправленные с пользователем, я создал компонент Vue с помощью эхо-прослушивателя в установленной функции. Здесь мой компонент:
<template>
<div class="container">
<div class="row">
</div>
</div>
</template>
<script>
export default {
mounted() {
console.log('Component mounted.');
window.Echo.channel('user-created')
.listen('.user.created', (data) => {
console.log(data);
});
},
data(){
return {
messages: []
}
}
}
</script>
Когда я обновил мою веб-страницу, Component mounted
был зарегистрирован в консоли, поэтому я уверен, что он загружен. Но по какой-либо причине, когда я отправляю команду CreateUser, данные не регистрируются в консоли браузеров.
Здесь вы можете указать:
Я изменил свой драйвер вещания на redis в своем .env
BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
Я также раскомментировал BroadcastingServiceProvider в конфигурации app.php.
Я не могу думать ни о чем другом прямо сейчас, чтобы вы могли указать, что я это сделал, но если я вспомню какие-либо другие, я обновлю вопрос.
Спасибо за любую помощь.
Примечание. Я не знаком с Редисом, поэтому в настоящее время я склоняюсь к тому, что это моя проблема. Просто добавив predis\predis
, поскольку зависимость просто не похожа на все, что я должен делать. Надеюсь, эта заметка поможет.
Edit:
Как и было предложено, я попытался запустить redis-server
, прежде чем запустить laravel-echo-server. Это то, что было возвращено в консоли:
[email protected]:~/Code/Chatter$ redis-server
16342:C 01 Jun 05:45:38.066 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
16342:M 01 Jun 05:45:38.067 * Increased maximum number of open files to 10032 (it was originally set to 1024).
16342:M 01 Jun 05:45:38.067 # Creating Server TCP listening socket *:6379: bind: Address already in use
Я предполагаю, что это означает, что сервер redis запущен, поэтому я думаю, что усадьба запускает его автоматически по умолчанию.
Репозиторий Github:
Жаль, что это заняло так много времени, я был очень занят лично. Вот ссылка на репозиторий github для этого проекта. Если есть какие-либо вопросы о репозитории, просто дайте мне знать.
https://github.com/Dastur1970/laravel-echo-test
Изменить 2:
На всякий случай кому-то это понадобится, вот мой код, который я использовал для создания экземпляра Echo
.
window.Echo = new Echo({
broadcaster: 'socket.io',
host: window.location.hostname + ':6001'
// auth: {
// headers: {
// 'Authorization': 'bf242984230eb684 1076b91e572e5bbcc81a852471364c49'
// }
// },
// key: '1076b91e572e5bbcc81a852471364c497',
// csrfToken: token.content
});
Прокомментировал некоторые вещи, которые я тестировал. Не был уверен, что мне понадобится снова, поэтому я просто оставил их прокомментированными. Дайте мне знать, действительно ли может быть полезен какой-либо из комментариев.