【问题标题】:How can I use PHP & NodeJS for realtime notifications?如何使用 PHP 或 NodeJS 进行实时通知?
【发布时间】:2016-09-17 15:32:56
【问题描述】:

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

【问题讨论】:

  • websockets 可以帮助你
  • 我不知道为什么你需要使用 nodejs,因为 web-sockets 在 php 中也是可用的,如果你想使用 nodejs 那么为什么你的部分项目在 php 中。您应该尝试重新考虑您的堆栈,仅将 nodejs 用于实时通知没有多大意义
  • @AJS 不错,我是一个半正派的 JavaScript 开发人员,从不使用 Web 套接字,也不想花时间学习 Web 套接字。
  • 好吧nodejs不是websockets,它是一个类似于php的平台,你需要了解websockets,因为你将使用socket io ie。网络套接字
  • 查看this

标签: javascript php jquery ajax node.js


【解决方案1】:

当 Ajax 在起始存储 sessionid 向 php 发出请求时,向任何数据库(如 redis)请求 id 并使用带有 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);
}

【讨论】:

    【解决方案2】:

    最好的方法是在 nodeJS 中实现消息服务。基本上消息服务是客户端可以订阅某种事件的服务。另一个客户端也可以将事件推送到服务(因此可以将此事件传递给订阅的客户端)。

    现在这很标准。大多数在线消息服务都以这种方式工作(Pusher、Pubnub 等),因此通过在您的节点应用程序中实现此模型,您以后可以将实时部分外包给第三方服务。

    可以使用 socket.io(已经实现订阅和房间模式)完成交付。发布可以是任何端点(socket.io 特殊消息,REST 端点,任何 express 可以开箱即用的处理)。

    【讨论】:

      猜你喜欢
      • 2016-01-12
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2018-12-12
      • 2015-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多