当您的 express 应用收到编辑配置的请求时,将项目添加到配置为并发 1 的async.js 队列。这将防止 > 1 并发尝试编辑远程配置。伪代码将是:
- 在应用程序启动时,定义您的
updateNetworkConfig
功能
- 在应用启动时,创建一个并发队列 1
var networkQueue = async.queue(updateNetworkConfig, 1);
- REST 像 PUT /api/config/network 一样使用新配置作为 JSON 中的请求正文
- 将一个项目添加到队列中,传递新的配置数据
networkQueue.push(req.body.config);
- (
req.body
由 bodyParser 连接中间件提供)
- 为每个独立配置重复该设置:文件系统等
您将需要一堆其他管道来处理回调并在保存配置时通知 REST 客户端。如果队列不为空,则由您决定是否排队呼叫或拒绝新呼叫。
由于您坚持不学习和使用令人敬畏的 async.js 库,这将提高您对异步编程的流畅度并教给您有价值的东西,这就是交易。使用这个叫做变量的东西。
var updatingNetwork = false;
app.put('/api/config/network', function (req, res) {
if (updatingNetwork) {
return res.status(409).send("Try later");
}
updatingNetwork = true;
updateNetworkConfig(req.body.config, function (error) {
updatingNetwork = false;
if (error) {
return res.status(500).send(error);
}
res.status(200).send("done");
});
});
- 当一个请求进来时,如果
updatingNetwork
是真的,你知道已经有一个更新在处理中,要么排队要么拒绝它。