リアルタイム更新をセットアップするためにSocket.ioでRedisを使用していますが、Laravel Echoはイベントをキャッチしていません。Laravel Echoはsocket.ioでイベントをキャッチしません
私がio()のインスタンスを使用すると、うまく動作します。ここに私のコードはイベントをリッスンするために私VUEアプリである:
はイベント
window.Echo.channel('users')
.listen('UserCreated', event => {
console.log(event);
this.all_users.push(event.user);
this.filter_data();
});
をキャッチしませんイベント
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));
イベントをプッシュする私のノードjsのコードをキャッチします。
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);
マイLaravelイベントブロードキャスト
<?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'];
}
}
私は、デフォルトではそれがusers:App\Events\UserCreated
としてそれらを受けるが、私は運がなかったため、イベントはLaravelエコーに渡される方法を変更しようとしました。