Angular 2,Laravel 5.2和ioredis实时应用

时间:2017-01-10 12:53:38

标签: node.js laravel angular redis

我一直在搜索差不多10个小时,刚刚找到了similar question,尽管我已经尽力让它变得可能,但它没有得到应有的回答。对不起,如果它只是一个愚蠢的问题,但要么我不知道或它不按照它应该的方式工作。

所以我的角度2组件有类似

的东西
import * as io from "socket.io-client";
export class TasklistComponent implements OnInit {
 ngOnInit() {
    var socket = io("http://localhost:3000");
    socket.on("test-channel:TasklistModified", function(message) {
        console.log(message);
    });
 }
}

我在laravel根目录上配置了socket.js

var app = require('express');
var http = require('http').Server(app);
var io = require("socket.io")(http);
var Redis = require("ioredis");
var redis = new Redis({
   scheme: 'localhost',
   port: 6379,          // Redis port
   host: '127.0.0.1'
});

redis.subscribe('test-channel', function(err, count) {
   //..
});

redis.on('message', function(channel, message) {
   console.log("Message Recieved", channel, message);

   message = JSON.Parse(message);
   io.emit(channel + ":" + message.event, message.payload);
});

http.listen(3000, function() {
   console.log('listening on port 3000');
});

我在laravel routes.php

上有以下事件类和路线
Route::get('event', function() {
   event(new TasklistModified([
        'name' => 'test'
    ]));
});
//Event Class
use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class TasklistModified extends Event implements ShouldBroadcast
{
    use SerializesModels;
    public $tasklist;
    public function __construct($tasklist)
    {
        $this->tasklist = $tasklist;
    }
    public function broadcastOn()
    {
        return ['test-channel'];
    }
}

我打开了两个浏览器并尝试运行

Angular:localhost:4200

和Laravel

localhost:8000 / event

当我在laravel中点击event路线时,我无法得到任何回复。

正在运行的应用

节点:3000

Laravel:8000

Angular2:4200

您的回答将会受到很多赞赏。 感谢

1 个答案:

答案 0 :(得分:0)

我忘了在我的Windows机器上安装Redis。一切似乎都很好。 :)  Here's how you can install Redis on Windows。试试@Dherik回答