Bence klasik yoldan yapın.
json2.php
<?php
header("Content-type: application/json; charset=UTF-8");
echo '
{
"id": 23,
"mesaj": "121878951235 nolu kayıt yapıldı",
"url": "http://localhost/kayit/23"
}
';
test.html (bunu laraveldeki ana şablona yerleştirdiğinizi düşünün) javascript kodları json içeriğini alıp bildirimi yapacaktır.
setTimeout(loadDoc,20000); ile 20 saniye de bir kotrol edilecektir. Kayıt id bilgisi çerez olarak kaydedilir ve id bilgisi çerezdeki ile karşılaştırılır. Aynı ise bildirim yapılmaz. Değilse yeni bildirim ekrana gönderilir.
Siz saniye değerini kendinize göre ayarlayıp test edin, json2.php deki id bilgisini değiştirip test edin, bir fikir edinirsiniz.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf8">
<style>
.alert {
padding: 20px;
background-color: #f44336;
color: white;
opacity: 1;
transition: opacity 0.6s;
margin-bottom: 15px;
}
.alert.success {background-color: #4CAF50;}
.alert.info {background-color: #2196F3;}
.alert.warning {background-color: #ff9800;}
.closebtn {
margin-left: 15px;
color: white;
font-weight: bold;
float: right;
font-size: 22px;
line-height: 20px;
cursor: pointer;
transition: 0.3s;
}
.closebtn:hover {
color: black;
}
</style>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.js"></script>
</head>
<body>
<div id="demo"></div>
<h2>Bildirim demo</h2>
<script>
function loadDoc() {
var request = new XMLHttpRequest();
request.open('GET', 'json2.php', true);
request.onload = function () {
var data = JSON.parse(this.response);
var set_time = getCookie("notification");
if(set_time != data.id){
setCookie("notification", data.id, 365);
$('<div class="alert">'+
'<span class="closebtn">×</span>'+
'<strong>'+data.id+'</strong> ' + data.mesaj + ' <strong>'+data.url+'</strong>' +
'</div>').insertAfter( "#demo" ).hide().show('slow');
}
// 20 saniye ( 1 saniye 1000 eder)
setTimeout(loadDoc,20000);
}
request.send();
}
loadDoc();
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires="+d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
$(document).on('click','.closebtn',function() {
$(this).slideUp(function() {
$(this).closest(".alert").remove();
});
});
</script>
</body>
</html>
Yukarıdaki kodları deneyin bir fikir sahibi olabilirsiniz. Daha sonra işin içine redisi katabilirsiniz.
json php için redis için aşağıdaki gibi kayıt işlemini laravelde yapabilirsiniz.
// Redis kayıt
$array = array(
'id' => 23,
'mesaj' => "verilecek mesaj",
'url' => 'http://localhost/kayit/23'
);
$encode_message = json_encode($array);
redisin set metodu ile 'message' anahtarı ile kaydettiğinizi düşünemlim.
json php ise direk redis ile çalışmalı, laravelin rotası ile değil, çünkü çok fazla işlem yapacaktır. Bütün bir sistemi her defasında kullanmak mantıklı değil. Bunun yerine sadece redis sınıfı ile çalışılabilir.
<?php
require "predis/autoload.php";
PredisAutoloader::register();
try {
$redis = new PredisClient();
// sunucu bunlara ihtiyaç duyuyorsa kendine göre düzenle
/*
$redis = new PredisClient(array(
"scheme" => "tcp",
"host" => "153.202.124.2",
"port" => 6379
));
*/
}
catch (Exception $e) {
die($e->getMessage());
}
//redis okuma
echo $redis->get('message');
yukarıdaki kod json2.php ile aynı çıktıyı vermelidir. Ben olsam böyle yapardım, ama tabi siz illa laravel ile bütünleşik olsun diyorsanız o çok dolamaçlı bir yol olur. Kendim bizzat test etmeden birşey diyemem.