【发布时间】:2016-03-10 14:44:00
【问题描述】:
我使用deepstream.io 和rethinkdb 作为持久性存储,制作了一个实时投票系统的原型。到目前为止,它可以工作,并且多个浏览器可以保持同步以获取最新的投票计数(见下面的截图),但是,我不喜欢它的一件事是 vote count 在浏览器中递增,即发送到deepstream.io 远程服务器。
嵌入在客户端浏览器中的 JS 代码:
/**
* Login to deepstream as Frank
*/
var ds = deepstream( 'localhost:6020' ).login({ username: 'Frank'});
var name = 'upvote';
var upVotes;
var voteText = $('.streaming-prices .vote');
var record = ds.record.getRecord(name);
$('#upvote_btn').click(function() {
// on button click, increment the vote counts
// set the record stored in the rethinkdb storage
record.set({
count: ++upVotes
});
});
record.subscribe('count', function(newVal) {
console.info('count updated, newVal: ', newVal);
upVotes = newVal;
voteText.text(newVal);
});
server.js 代码:
var PermissionHandler = require( './permission-handler' );
var DeepstreamServer = require( 'deepstream.io' ),
RdbC = require( 'deepstream.io-storage-rethinkdb' ),
server = new DeepstreamServer();
server.set('host', '0.0.0.0');
server.set('port', 6020);
server.set( 'tcpHost', '0.0.0.0' );
server.set( 'tcpPort', '6022' );
server.set( 'permissionHandler', new PermissionHandler() );
server.set( 'storage', new RdbC({
port: 28015,
host: '127.0.0.1',
splitChar: '/',
database: 'votings',
defaultTable: 'question'
}));
server.start();
所以你可以看到客户端的js代码直接增加了投票计数并更新了记录,这是要发送到deepstream.io服务器更新数据库的。 我不喜欢这部分,因为我不希望用户搞砸总票数。 相反,我希望客户端只是将+1 之类的内容发送到服务器,并让服务器更新持久性的总数。 我不确定这是否可能,有人可以摆脱一些光?我很感激
【问题讨论】:
标签: javascript real-time rethinkdb voting deepstream.io