php - 通过 Laravel 中的 Pusher 的 Web Socket - 调用 4 次
问题描述
我在我的 Laravel 项目中使用 Pusher。当我记录任何小便、便便时,它会在我的所有设备上广播这些事件:手机、笔记本电脑。
我有这个代码。
<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.log('\x1b[41m%s\x1b[0m',">>>>>>>>>>>>>>>>>>>>>>>>>DBEUG<<<<<<<<<<<<<<<<<<<<<<<<<");
console.log('\x1b[41m%s\x1b[0m','method');
console.log(method);
console.log('\x1b[41m%s\x1b[0m',">>>>>>>>>>>>>>>>>>>>>>>>>DBEUG<<<<<<<<<<<<<<<<<<<<<<<<<");
console.log("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.log('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.log('SUCCESS response',response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(JSON.stringify(jqXHR));
console.log("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 只显示一次。见红色横幅:
解决方案
推荐阅读
- python - 在pygame中射击直升机
- r - wrapr 似乎不适用于向量
- r - 创建具有特定汇总统计的变量表
- python - TypeError:必须是 str,而不是用户输入的类型
- ios - 当表情符号键盘选择问题时,UITextField textInputMode 返回 nil
- javascript - 在 chrome 扩展的 content.js 中注入 Google recaptcha 的 JS 文件
- javascript - JavaScript 增量数组 React
- vb.net - 是否可以在 VB.net 中检查网页是否存在
- mysql - MYSQL:连接表的性能缓慢
- c# - 在 Web API 2 中读取 POST 请求正文