Laravel Echo でRedisのPUB/SUB使ってみた所管
イベントをブロードキャストする感じのあれ。
CLIやコントローラ上で発生したイベントを、SocketIO経由でブラウザに投げたり、キューに通知したりするときに使える。
クライアント立てる
WebSocket用のサーバが用意されてる見たいだけど上手く動かなかった。
https://github.com/tlaverdure/laravel-echo-server
のでとりあえずCLIのSUBで試してみる。
以下の内容でsub.js
を作成し node sub.js
で実行。チャンネルを立ち上げる。
var subscriber = require('redis').createClient({
host: "",
port: "",
password:"",
});
subscriber.subscribe('orders');
subscriber.on('message', function(channel, message) {
console.log('channel: ' + channel + ', message: ' + message);
});
redisはHerokuとかから引っ張ってくると楽。チャンネル名は適当に。
とりあえずredis cliでチャンネルができている事を確認。
$ heroku redis:cli # redis 接続
> pusbub channels
1) orders
Laravel側の用意
config でredisの設定して…BroadcastServiceProvider
有効化して、envでBROADCAST_DRIVER
をredis
にして…
まずは、イベントのクラスを作成。
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class Message implements ShouldBroadcast
{
public function broadcastOn()
{
return new Channel("orders");
}
}
ShouldBroadcast
を実装する簡単なクラスでOK.
最後にイベントを発行するコマンドを作成する。
<?php
namespace App\Console\Commands;
use App\Events\Message;
use Illuminate\Console\Command;
class Hello extends Command
{
protected $signature = "hello";
public function handle(){
event(new Message());
}
}
kernel に登録して php artisan hello
で完了
立ち上げた node sub.js
の方にイベントの通知が来るはず。
感想
- Websocketとつなげると色々出来そう
- laravel-echo-server動かしたい。
- あとはsocket.ioとredisつなぐだけなのでそんなに難しくはなさそう
- 認証の機能とかもあるけど、必要だろうか…
- 後でLumenで試す。
- PUBはPHPのREST APIで、通知専用のSUBのみNODEというのは運用が楽そう
Author And Source
この問題について(Laravel Echo でRedisのPUB/SUB使ってみた所管), 我々は、より多くの情報をここで見つけました https://qiita.com/mikakane/items/578b3f92d5d712bc279a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .