Я сделал прототип системы голосования в реальном времени, используя 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
на сервер и позволял серверу обновлять общее количество для сохранения. Я не уверен, возможно ли это, может кто-нибудь пролить свет? Я ценю это