原子RPC调用

时间:2016-10-13 15:38:19

标签: atomicity deepstream.io

你能否告诉我RPC是否以原子方式执行?

例如,在两个帐户之间进行交易,我会有一个RPC:

1. client.rpc.provide('xfer', (data, response) => {
2.   var srcWallet = getRecord(data.srcWalletId);
3.   var dstWallet = getRecord(data.dstWalletId);
4.   if (srcWallet.get('balance') >= data.xferAmount) {
5.     srcWallet.set('balance', srcWallet.get('balance') - xferAmount);
6.     dstWallet.set('balance', dstWallet.get('balance') + xferAmount);
7.   }

是否确定srcWallet天平在第4行和第5行之间无法改变?

1 个答案:

答案 0 :(得分:0)

只是为了澄清:deepstream使用ds.rpc.make / ds.rpc.provide执行RPC(请求/响应),您的示例引用记录。

以上示例暂时适用于单线程的JavaScript实现,但是您不能确定在到客户端的路上没有传入的事务来改变钱包的余额。要强制执行上述规则,请在服务器上使用Valve规则,例如

_('src-wallet').balance >= data.xferAmount

请在

找到更多信息

https://deepstream.io/tutorials/core/permission-conf-simple/ https://deepstream.io/tutorials/core/permission-conf-advanced/ https://deepstream.io/tutorials/core/permissions-dynamic/