当我们在Laravel和Websockets中对数据库进行一些更改而无需使用令牌/护照时,是否可以通过任何方式来更新前端上的数据。 只需简单地实时显示更新的数据,而无需超时。
答案 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',
]
));