1

你能告诉我 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 行之间更改吗?

4

1 回答 1

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-动态的/

于 2016-10-14T12:30:41.830 回答