在laravel 5.2中自动触发广播事件

时间:2016-06-03 10:10:40

标签: node.js laravel redis socket.io

我正在使用BROADCAST_DRIVER = redis来触发laravel 5.2事件。 一旦我在命令提示符下运行以下服务:

  1. 在第一个选项卡中,运行node socket.js

    您应该看到“在端口3000上聆听”

  2. 在第二个标签中运行redis-server --port 3001

  3. 之后并排打开两个浏览器窗口,在第一个窗口中点击URL:“this article

    在第二个:“http://your-project-name.app/fire

    继续刷新第一个窗口,您应该看到第二页的内容已更新。

    但我不想刷新页面,我只想在后台触发广播事件,也不想运行“node socket.js和redis-server --port 3004”服务。

    我已经安装了node,redis,express ioredis socket.io并创建了该事件。

    我的套接字代码:

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    var Redis = require('ioredis');
    var redis = new Redis();
    redis.subscribe('test-channel', function(err, count) { });
    redis.on('message', function(channel, message) { 
      console.log('Message Recieved: ' + message);
      message = JSON.parse(message);
      io.emit(channel + ':' + message.event, message.data);
    });
    
    http.listen(3004, function(){
      console.log('Listening on Port 3004');
    });
    

1 个答案:

答案 0 :(得分:1)

您需要使用Redis Pub/Sub

  

这些Redis命令允许您监听给定“频道”上的消息。您可以从其他应用程序向该频道发布消息,甚至使用其他编程语言,以便在应用程序/进程之间轻松进行通信。

首先,让我们使用subscribe方法通过Redis在通道上设置一个监听器。我们将此方法调用放在Artisan命令中,因为调用subscribe方法开始一个长时间运行的过程:

    <?php

    namespace App\Console\Commands;

    use Redis;
    use Illuminate\Console\Command;

    class RedisSubscribe extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'redis:subscribe';

        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'Subscribe to a Redis channel';

        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            Redis::subscribe(['test-channel'], function($message) {
                echo $message;
            });
        }
    }

转到终端,在根文件夹中启动命令

 php artisan redis:subscribe

现在,我们可以使用publish方法将消息发布到频道:

 Redis::publish('test-channel', json_encode(['foo' => 'bar']));

此方法不使用nodejs。