我怎样才能使用PHP& NodeJS用于实时通知?

时间:2016-05-20 11:26:14

标签: javascript php jquery ajax node.js

我需要能够在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以通知用户它正在运行,然后通知它何时完成。我怎么样?

2 个答案:

答案 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端点,任何快递都可以开箱即用)。