Firebase客户端可以将任务添加到队列中,如下所示:
var tasks = db.ref('quote-request-queue/tasks');
tasks.push({'need': 'quote for customer'});
此任务表示获取商品报价的请求。
在后端,Firebase队列工作人员将接受任务并完成一些工作,但在后端工作完成后更新客户端的规范方法是什么?
我们是否应该在登录用户模型中使用属性,客户端是否为其监听更改?
登录用户可以监听自己模型的更改,然后更改会获得报价数据吗?
除登录用户模型本身外,或许在数据库中使用其他模型?
答案 0 :(得分:1)
我会在任务中放入一个唯一的标识符,然后您可以写入响应“队列”(此时它更像是一个列表)。
所以:
var tasks = db.ref('quote-request-queue/tasks');
var key = tasks.push().key;
tasks.push({'need': 'quote for customer', id: key });
然后服务器将其响应写入:
quote-responses
<key>
客户等待那里的回复:
var responses = db.ref('quote-responses').child(key);
responses.on('value', function(snapshot) {
if (snapshot.exists()) {
// TODO: handle the response in the snapshot
}
});
答案 1 :(得分:1)
我们目前通过使用队列的功能来处理响应。安全规则强制用户将其用户ID写为请求的属性,并且他们可以只读取队列中包含其ID的项目。
<start state goes here>
这允许客户端创建新作业并删除作业,但不能修改其内容。
要确保客户端只能在开始状态中添加条目,您需要在上面的规则中填写{
"error_state" : "error",
"finished_state" : "finished",
"in_progress_state" : "in_progress"
}
。
{{1}}
您需要一个非默认规范来指定已完成状态,客户端可能会查看该状态以了解请求何时解析。
不能依赖客户端来清理像这样使用的任务。您应该将服务器配置为在超时后自动删除响应。例如,用户可能会在返回响应之前刷新或离开页面。这可能只发生不到1%的时间,但如果队列填满完成的响应,您的性能将会下降。