2016-06-03 2 views
0

Я использую BROADCAST_DRIVER = redis для запуска события laravel 5.2. После я запустить следующие услуги по командной строке:Автоматический запуск события трансляции в laravel 5.2

  1. В первой вкладке, запустите узел socket.js

    Вы должны увидеть «Прослушивание порта 3000»

  2. На вкладке второй пробег Redis-сервер --port 3001

После Открывают два окна браузера бок о бок и в первом хит URL: "http://your-project-name.app/fire «

А во втором:» http://your-project-name.app/test "

Keep освежающие первое окно, и вы должны увидеть содержимое второй страницы обновляется.

Но я не хочу обновлять страницу, я просто хочу вызвать широковещательное событие в фоновом режиме, а также не хочу запускать службы «node socket.js и redis-server --port 3004».

Я установил узел, 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'); 
}); 
+0

мой код socket.js: var app = require ('express')(); var http = require ('http'). Сервер (приложение); 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 = JSON.parse (message); io.emit (channel + ':' + сообщение.event, message.data); }); http.listen (3004, function() { console.log («Прослушивание порта 3004»); }); –

ответ

1

Вы должны использовать Redis Pub/Sub

Эти команды Redis позволяют прослушивать сообщения на заданном "канале". Вы можете публиковать сообщения на канале из другого приложения или даже использовать другой язык программирования, что позволяет легко общаться между приложениями/процессами.

Во-первых, давайте настроим прослушиватель на канале через Redis, используя метод подписки. Разместим этот вызов метода внутри Artisan команды с момента вызова метода подписки начинается длительный процесс:

<?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 

Теперь мы может публиковать сообщения на канале с использованием метода публикации:

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

Этот метод не использует nodejs.

+0

для получения конца. Я использую следующий код: А также у меня есть код события в laravel 5.2, Что дальше мне нужно сделать, Не могли бы вы дать мне какое-то направление? С нетерпением жду вашего ценного ответа! –

+0

Моя проблема заключается в том, чтобы автоматически инициировать событие в фоновом режиме в определенный промежуток времени. У меня все работает, но когда я запускаю его вручную. –

+0

Паб/суб, что вам нужно, забыли nodejs. В https://laravel.com/docs/5.2/redis#pubsub у вас есть пример. Сначала создайте команду для прослушивания и после отправки сообщения на канал с помощью Redis :: publish() – Sangar82