我需要能够在PHP脚本完成后获得实时通知,我使用jQuery,PHP,AJAX,nodeJS。
我通过AJAX将一些东西发送到PHP脚本,我需要能够在此脚本启动时通知用户(简单)但我需要能够使用nodeJS在完成时通知。
AJAX脚本
$(document).ready(function($) {
$('.rules-table').on('click', '.runRule', function(event) {
event.preventDefault();
/* Act on the event */
var ruleID = $(this).parents('tr').attr('id');
$.ajax({
url: '/ajax/run-rule.php',
type: 'POST',
dataType: 'json',
data: {
ruleID: ruleID
},
})
.done(function(data) {
console.log(data);
})
.fail(function() {
console.log("error");
})
.always(function() {
console.log("complete");
});
});
});
发送到负责处理的PHP脚本(可能需要一段时间) 所以我需要从这里访问NodeJS以通知用户它正在运行,然后通知它何时完成。我怎么样?
答案 0 :(得分:0)
当Ajax在起始商店sessionid向php发出请求并向任何数据库请求id时,如redis和使用带有Socket.io的NodeJs发送实时通知。在你的PHP代码中创建一个类似下面的函数,其中$ data是信息,$ requestId是ajax请求的id。在您的nodeJs代码中获取有关该requestId的会话ID,并发出要显示的消息。
public static function sendSocketMessage($data, $requestId) {
$url = 'http://' . url . ':3000/publish?salt=<some_salt>';
$curl = new \skeeks\yii2\curl\Curl();
$curl->setOption(CURLOPT_POSTFIELDS, json_encode(array(
'id' => $requestId,
'message' => $data,
)));
$curl->setOption(CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
));
return $curl->post($url);
}
答案 1 :(得分:0)
最好的方法是在nodeJS中实现消息传递服务。基本上,消息传递服务是客户可以订阅某种事件的服务。另外一个客户端可以将事件推送到服务(因此该事件可以传递给订阅的客户端)。
这些天很标准。大多数在线消息服务都以这种方式运行(Pusher,Pubnub等),因此通过在您的节点应用程序中实现此模型,您以后可以将实时部分外包给第三方服务。
可以使用socket.io(已经实现订阅和房间模式)完成交付。发布可以是任何端点(socket.io特殊消息,REST端点,任何快递都可以开箱即用)。