J'utilise Redis avec Socket.io pour configurer les mises à jour en temps réel mais Laravel Echo n'attrape pas les événements.Laravel Echo n'attrape pas les événements avec socket.io
Si j'utilise une instance de io() cela fonctionne très bien. Voici mon code dans mon application vue pour écouter les événements:
ne sera pas attraper les événements
window.Echo.channel('users')
.listen('UserCreated', event => {
console.log(event);
this.all_users.push(event.user);
this.filter_data();
});
attraperez événements
window.socket = io(window.location.origin+':3000');
window.socket.on('users:App\\Events\\UserCreated', function(data){
console.log(data);
console.log('from socket');
this.all_users.push(data.user);
this.filter_data();
}.bind(this));
Code js Mon noeud pour pousser les événements.
var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var redis = new Redis();
redis.subscribe('users', function(error, count){
console.log(error);
console.log(count);
});
redis.on('message', function(channel, message){
console.log(channel);
message = JSON.parse(message);
console.log(message);
const emmitChannel = `${channel}:${message.event}`;
console.log(emmitChannel);
io.emit(emmitChannel, message.data);
});
server.listen(3000);
Mon Laravel Evénement de diffusion
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
//Models
use App\User;
class UserCreated implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $user;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(User $user)
{
$this->user = $user;
$this->dontBroadcastToCurrentUser();
}
/**
* Get the channels the event should broadcast on.
*
* @return Channel|array
*/
public function broadcastOn()
{
return ['users'];
}
}
J'ai essayé de changer les événements de manière sont passés à Laravel Echo puisque par défaut, il les reçoit comme users:App\Events\UserCreated
mais je ne l'ai pas eu la chance.