gpt4 book ai didi

angularjs - 使用 Socket IO、Laravel、Redis、Angularjs 向特定用户发送数据

转载 作者:IT王子 更新时间:2023-10-29 05:58:37 24 4
gpt4 key购买 nike

我正在构建一个应用程序,让学生能够查看由管理员创建的日程安排。现在每个学生都有一个 group_id。我想实时更新时间表,所以我应用了本教程 http://www.kodeinfo.com/post/realtime-app-using-laravel-nodejs-angularjs-redis .这是我到目前为止所做的。

事件处理器:

namespace echooly\Handlers;
use Redis;
use Response;

class StudentScheduleUpdatedEventHandler
{

CONST EVENT = 'schedule.update';
CONST CHANNEL = 'schedule.update';

public function handle($data)
{
$redis = Redis::connection();
$redis->publish(self::CHANNEL, $data);

}

}

AdministrationController(事件 CRUD 方法)

//Create an event
public function createEvent()
{

if(Auth::Admin()->check()) {
$eventDetail = Input::all();
$event = Planing::create($eventDetail);
$event->save();
Event::fire(\echooly\Handlers\StudentScheduleUpdatedEventHandler::EVENT, array($event));
} else {
return Redirect::intended('/');
}
}

所以基本上我正在插入最新创建的事件

Node 服务器:

var express  = require('express'),
http = require('http'),
server = http.createServer(app);
var app = express();
const redis = require('redis');
const io = require('socket.io');
const client = redis.createClient();

server.listen(3000, 'localhost');
console.log("Listening.....");

io.listen(server).on('connection', function(client) {
const redisClient = redis.createClient();

redisClient.subscribe('schedule.update');

console.log("Redis server running.....");

redisClient.on("message", function(channel, message) {
client.emit(channel, message);
});
client.on("getGroup", function(groupId) {
console.log(groupId);
});

client.on('disconnect', function() {
redisClient.quit();
});
});

Angular Controller :

  studentSocket.on('schedule.update', function (data) {
$scope.events.length = 0;
$scope.populatePlan(JSON.parse(data));
inform.add('New Course Added');
});

问题是我如何过滤发送给特定学生的数据。

  1. 有什么东西告诉我我们可以用 Redis 创建一个动态 channel ?可悲的是我没有任何经验。
  2. 我试图通过学生组 ID 获取数据时触发事件这最终会使学生在组 ID 更改时看到新的时间表。

//Show Planing by group
public function showPlaningsByGroup($id){
if(Auth::Admin()->check()){
$planing = Planing::with('Course')->where('group_id',$id)->get();
Event::fire(\echooly\Handlers\StudentScheduleUpdatedEventHandler::EVENT, array($planing));
return Response::json($planing);
}
}

我希望我已经足够清楚了我真的希望得到一些答案谢谢。

最佳答案

您需要通过单独的 channel 将数据发送给每个学生。

例子:

public function broadcastOn()
{
return ['Student.' . $this->student->Id];
}

关于angularjs - 使用 Socket IO、Laravel、Redis、Angularjs 向特定用户发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29993559/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com