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
服务器发送类似的东西,并让服务器更新持久性的总数。我不确定这是否可能,有人可以解释一下吗?我很感激