クライアントに応答を返す方法は間違いありません。私たちは、Flashlight search integrationのそれの良い例があります。
function doSearch(index, type, query) {
var ref = new Firebase(URL+'/search');
var key = ref.child('request').push({ index: index, type: type, query: query }).key();
console.log('search', key, { index: index, type: type, query: query });
ref.child('response/'+key).on('value', showResults);
}
このコードは、クライアント側のJavaScriptアプリケーションで実行され、push()
を呼び出す行にサーバに検索語を送信します。次に、関数の最後の行に戻ってくる応答を待つ。ここで重要な点は、要求を送信するために使用したsam push id/keyを使用して応答をリッスンすることです。こうすることで、要求と応答が一致します。
Firebase Queueには、このような "ハンドシェイク"のサポートが組み込まれていませんが、アプリケーションのクライアントコードとサーバーコードに簡単に組み込むことができます。タスクを追加すると、あなたがリクエストID(the firebase-queue sampleからアダプタ)を追加:あなたのタスクワーカーで
var request_id = ref.push().key();
ref.child('queue/tasks').push({ requestId: request_id, foo: 'bar' });
を、あなたはあなたの通常の処理を実行し、同じ要求IDを持つデータベース(アダプタに戻すレスポンスを書きfirebase-queue sampleから):
var ref = new Firebase('https://<your-firebase>.firebaseio.com/queue');
var responses = new Firebase('https://<your-firebase>.firebaseio.com/responses');
var queue = new Queue(ref, function(data, progress, resolve, reject) {
// Read and process task data
console.log(data);
// Do some work
progress(50);
// Finish the task asynchronously
setTimeout(function() {
// write the response to the client
responses.child(data.requestId).set({ allDone: true });
// tell firebase-queue that we're done
resolve();
}, 1000);
});
お返事ありがとうございます。結果を渡すために私自身のロジックを書かなければならないと思っていましたが、/ respond/の結果を公開するヒントはきちんとしています。 –
"ref.child( 'レスポンス/' +キー).on( 'value'、showResults);" "ref.child( 'responses /' + key).on( 'value'、showResults);"コードの残りの部分と一致するようにします。 「応答」ではなく「応答」に注目してください。これは主に将来の読者のために、これを動作させるためのものです。 –
私はこのソリューションを実装しましたが、それは私には不思議に思えます。すべてのレスポンスノードはどうなりますか?誰がそれらを削除しますか?クライアントから削除する必要がありますか?クライアントに応答ノードへの読み取り/書き込みアクセス権を与えた場合、クライアントが聴くことができる前に、彼は何とか挿入物を聞き取り、削除することができますか? – Tom