Laravel和Websockets中的实时数据库

时间:2018-11-26 14:19:27

标签: database laravel websocket

当我们在Laravel和Websockets中对数据库进行一些更改而无需使用令牌/护照时,是否可以通过任何方式来更新前端上的数据。 只需简单地实时显示更新的数据,而无需超时。

1 个答案:

答案 0 :(得分:0)

一个简单的解决方案是节点中的Websocket服务器,该服务器通过laris通过redis发布获取更新。 Websocket服务器订阅该主题中的客户端(前用户),然后将数据推送通过。

这里有一些代码可以尝试。 (无身份验证,因此请勿在产品中使用!)。 redistopic是redis的主题

var express = require('express'),
fs = require('fs'),
http = require('http'),
server = http.createServer(app),
var app = express();

/* redis + socket.io */
const redis = require('redis');
const io = require('socket.io');
server.listen(8080);
log("Server Start");

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

socket.on('auth', function (data) {
    if(data.sockethash == 'noauth')
        redisClient.subscribe('redistopic')
}

// Redis Nachrichten Verabrieten und entsprechend weiterleiten
redisClient.on("message", function (channel, message) {
    if (channel == "redistopic")
        socket.emit('redistopic', message);
});

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

});

javascript部分

socket = io.connect('localhost:8080');
socket.on('connect', function (data) {
        socket.emit('auth', { sockethash: 'noauth' });
});
socket.on('redistopic', function (data) {
   var jd = JSON.parse(data); // if data is json
   console.log(jd) // else use data 
}

用于发布更新的Laravel代码 需要“使用照亮\支持\外观\ Redis;”之前

Redis::publish('redistopic', json_encode(
        [
            'var1' => 'value1',
            'var2' => 'value2',
        ]
    ));