2016-05-20 6 views
0

jQuery、PHP、AJAX、nodeJSを使用してPHPスクリプトが終了したら、リアルタイム通知を取得する必要があります。リアルタイム通知にPHPとNodeJSを使用するにはどうしたらいいですか?

私はPHPスクリプトにAJAX経由でいくつかのものを送りますが、このスクリプトが始まる(単純な)ときにユーザーに通知できる必要がありますが、終了時に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"); 
    }); 

    }); 
}); 

は、処理の負荷を(時間がかかる場合があります) ので、私はそれを実行しているユーザーに通知するために、ここからNodeJSにアクセスする必要がないPHPスクリプトに送信し、その後、通知それが終わったとき。どうやって?

+0

ウェブソケットがあなたを助けてくれる – llamerr

+0

web-socketがphpでも利用できるようにnodejsを使用する必要があるのか​​分かりませんし、nodejsを使いたいのであれば、なぜPHPで部分的なプロジェクトを持っているのですか?あなたはスタックを再考しようとするべきです、ただリアルタイム通知のためのnodejsを使用することはあまり意味をなさないです – AJS

+0

@AJSまあまあ、私は半ばまともなJavaScript開発者です、ウェブソケットを使用したことはありません。時間を学習するウェブソケット。 – Kieron606

答えて

0

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); 
} 
0

最善の方法は、nodeJSにメッセージングサービスを実装することです。基本的にメッセージングサービスは、クライアントが何らかの種類のイベントに登録できるサービスです。また、別のクライアントがイベントをプッシュすることができます(このイベントはサブスクライブされたクライアントに配信される可能性があります)。

最近はかなり標準的です。ほとんどのオンラインメッセージングサービスはそのように動作します(Pusher、Pubnubなど)。このモデルをノードアプリケーションに実装することで、後でリアルタイムパートをサードパーティサービスに委託することができます。

配信はsocket.io(既にサブスクライブとルームパターンを実装しています)を使用して行うことができます。パブリッシングは、任意のエンドポイント(socket.io特別メッセージ、RESTエンドポイント、任意のエクスプレスが自由に処理できるもの)でもかまいません。

関連する問題