我在我的网站上进行用户注册。
exports.regitser = (req, res)->
user =
unique_id : "RANDOM_HASH"
name : escape(req.body.name)
pass : escape(req.body.pass)
...
# registrations starts here
此时我需要将数据推送到RabbitMQ交换,并在单独的队列"reg_results"
中等待响应。在我使用"reg_results
收到unique_id="RANDOM_HASH"
“消息后,该用户(此HTTP请求)的注册似乎已成功完成,现在我可以res.send("You are registered!")
来客户端。
在来自客户端的持续HTTP请求的上下文中处理此模式的最佳方法是什么?
提前致谢。
答案 0 :(得分:1)
这很简单。您需要了解的主要事项是register(req,res)
在函数完成时不必向res提供结果。结果可以在以后随时发送。所以,对于你的代码来说,这将是一线
exports.register = (req, res)->
user =
...
# registrations starts here
//send your registration message here
app.resultsQueue.subscribe (msg) ->
if (msg is mine) res.render(msg)
使用某种Promise超时(在注册消息未在给定时间内到达的情况下)使代码更整洁可能是有意义的。
那么您的代码将是(我将切换到JavaScript)
# registrations starts here
var deferred = Q.defer();
deferred.promise.timeout(5000).then(function (msg) {
if (typeof msg == "Error")
//handle timeout
else
res.render(msg)
});
app.resultsQueue.subscribe (function(msg) {
if (msg is mine) deferred.resolve(msg);
});