Я использую Pusher в своем проекте Laravel. Когда я регистрировал любую мочу, какашку, он транслировал эти события на все мои устройства: телефон, ноутбуки.
У меня есть этот код.
<script src = "https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script type = "text/javascript" src = "https://momentjs.com/downloads/moment.js"></script>
<script src = "https://js.pusher.com/4.1/pusher.min.js"></script>
<script>
// Enable pusher logging - don't include this in production
Pusher.logToConsole = true;
var pusher = new Pusher('****', {
cluster: 'us2'
});
var channel = pusher.subscribe('logEventChannel');
channel.bind('logEvent', function(response) {
var log = response.data['json'];
var method = response.data['method'];
console.info('\x1b[41m%s\x1b[0m',">>>>>>>>>>>>>>>>>>>>>>>>>DBEUG<<<<<<<<<<<<<<<<<<<<<<<<<");
console.info('\x1b[41m%s\x1b[0m','method');
console.info(method);
console.info('\x1b[41m%s\x1b[0m',">>>>>>>>>>>>>>>>>>>>>>>>>DBEUG<<<<<<<<<<<<<<<<<<<<<<<<<");
console.info("SENT FROM BE", method , log);
//====================================
// POST
//====================================
if (method == 'POST'){
var type = log.type;
var id = log.id;
var babyId = log.babyId;
var updatedAt = log.updated_at;
var timeAgo = moment(updatedAt).fromNow();
var time = moment(updatedAt).format('hh:mm a');
getLogMessages(type);
getCount(type);
shake('.badge-'+type,1);
if (type == 'feed'){
logAudit(babyId);
blink(".timeLeft");
blink(".nextFeed");
}
var row = `<tr id = "tr-${id}" data-type = "${type}"> <td > <a class = "btn btn-${type}" > <img class = "logIconSmall" src = "/assets/be/img/baby/${type}.png"/> </a> </td> <td> <a onclick = "showModal('${time}','${type}','${id}')" class = "btn btn-link"> ${time} </a> </td> <td></td> </tr>`;
$('.tbody-log').prepend(row);
blink("#tr-"+id);
}
//====================================
// PUT
//====================================
if (method == 'PUT'){
var type = log.type;
var id = log.id;
var babyId = log.babyId;
var updatedAt = log.updated_at;
var timeAgo = moment(updatedAt).fromNow();
var time = moment(updatedAt).format('hh:mm a');
getLogMessages(type);
getCount(type);
shake('.badge-'+type,1);
if (type == 'feed'){
logAudit(babyId);
blink(".timeLeft");
blink(".nextFeed");
}
$("#tr-"+id).remove();
var row = `<tr id = "tr-${id}" data-type = "${type}"> <td > <a class = "btn btn-${type}" > <img class = "logIconSmall" src = "/assets/be/img/baby/${type}.png"/> </a> </td> <td> <a onclick = "showModal('${time}','${type}','${id}')" class = "btn btn-link"> ${time} </a> </td> <td></td> </tr>`;
$('.tbody-log').prepend(row);
blink("#tr-"+id);
}
//====================================
// DELETE
//====================================
if (method == 'DELETE'){
var id = log.logId;
var type = log.type;
var babyId = log.babyId;
if (type == 'feed'){
logAudit(babyId);
blink(".timeLeft");
blink(".nextFeed");
}
getLogMessages(type);
getCount(type);
shake('.badge-'+type,1);
blink("#tr-"+id);
$("#tr-"+id)
.animate({ backgroundColor: "#ef004810" }, 500 )
.animate({ backgroundColor: "black"}, 500 )
.fadeOut(100);
}
audit(babyId, id, type, method);
getNextFeed(babyId);
});
</script>
аудит fn
function audit(babyId, logId, type, method) {
var data = {};
data.babyId = babyId;
data.logId = logId;
data.type = type;
data.method = method;
console.info('SENT from FE',data);
$.ajax({
method: 'POST',
url: '/baby/audit',
crossDomain: true,
contentType: false,
headers: {
'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('value'),
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded",
"Cache-Control": "no-cache"
},
data: data,
success: function(response){
console.info('SUCCESS response',response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.info(JSON.stringify(jqXHR));
console.info("AJAX error: " + textStatus + ' : ' + errorThrown);
}
});
}
запустит этот контроллер fn
public function storeAudit()
{
$inputs = Request::all();
$logId = $inputs['logId'];
$babyId = $inputs['babyId'];
$type = $inputs['type'];
$method = $inputs['method'];
$baby = Baby::where('id',$babyId)->first();
if ($baby){
$log = new BabyLogAudits;
$log->type = $type;
$log->method = $method;
$log->babyId = intval($babyId);
$log->logId = intval($logId);
$log->note = Visitor::get_client_ip();
$log->save();
}
return response()->json($log,200);
}
Это работает, но каждый раз, когда я что-то делал, моя функция аудита вызывалась 4 раза.
Результат :
https://www.bunlongheng.com/baby/1/audit?code=rithys4k&type=all
Все вроде звонят только 1 раз ... почему запускалось 4 раза.
Почему ??
Это потому, что у меня дома 4 устройства, которые переходят по одной и той же ссылке?
Console.log показывает только один раз. Смотрите красное знамя:
Console.log показывает только один раз. Смотрите красное знамя:! [] (i.imgur.com/vqBhhJU.png)
Это странно. Я не знаю, откуда берется петля. Кроме того, вы знаете, как скрыть всю консоль-толкатель в моем console.info? Кажется, слишком много информации, и я запомнил мои места в консоли :(
Вы установили Pusher.logToConsole = true;
- установите значение false, чтобы не загромождать console.info.
Публикация с logid 2812 происходит 6 раз, а удаление для того же logid происходит 5 раз. а затем сообщение с логическим идентификатором 2822 происходит 5 раз, а удаление для того же логического идентификатора происходит 4 раза. Я не знаю, сможете ли вы найти связь между тем, что может помочь, но, пожалуйста, поделитесь журналами консоли, чтобы я мог попытаться понять, в чем проблема с логикой, которая вызывает несколько журналов консоли. обратите внимание, что logid одинаковы для каждой новой операции.