2016-10-13 5 views
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 사이에 변경할 수 없습니다 것이 확실 :

두 계정 사이의 거래를 만드는 예를 들어, 나는 이러한 RPC있을 것입니다?

답변

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/

+0

는 내가합니다 (RPC 페이지에 있기 때문에 요청, 간결함을 위해 위의 제공하는 RPC를 왼쪽 https://deepstream.io/tutorials/core/request-response-rpc /)는 '안전하게 다중 단계 레코드 트랜잭션을 결합합니다'라고 언급하고 있습니다.이 질문은 단일 스레드에서 하나의 RPC 공급자 만있는 것처럼 보입니다. – Perky