我一直在搜索差不多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
您的回答将会受到很多赞赏。 感谢
答案 0 :(得分:0)
我忘了在我的Windows机器上安装Redis。一切似乎都很好。 :) Here's how you can install Redis on Windows。试试@Dherik回答