Потоковое вещание в реальном времени для каждого пользователя через некоторый сервер Comet
Мне нужно спроектировать потоковый API, в котором каждый подключенный пользователь может иметь разные данные для каждой категории.
Допустим, два пользователя интересуются спортивными (категориями) RSS-потоками из потокового API, но у каждого пользователя есть собственный механизм фильтрации на сервере, который приводит к различным наборам push-данных...
Используя juggernaut, вы можете передавать данные по категориям (каналам), но я не смог найти способ отфильтровать некоторую часть данных по категориям на стороне сервера в зависимости от настроек фильтра пользователя.
1 ответ
Каналы обычно используются для фильтрации данных, например, один для /SPORT/FOOTBALL/PREMIERLEAGUE/MANU, другой /SPORT/FOOTBALL/CHAMPIONSHIP/WESTHAM и /SPORT/GOLF/USMASTERS.
Я знаю только один сервер Comet в реальном времени, который предлагает дополнительную фильтрацию через подписки на каналы, и это Liberator от Caplin System. Например (псевдокод):
var subscriber = new Subscriber();
var filter = "headline~transfer"; // where '~' means contains
subscriber.subscribe("/SPORT/FOOTBALL/PREMIERLEAGUE/MANU", filter, function(update) {
// handle update
});
Приведенный выше код будет подписываться на канал, но будет отправлять обновления только тогда, когда и когда пришло обновление headline
поле содержало текст transfer
,
Другое решение, которое предлагает такую функциональность запросов, - http://pubsub.io/. С их сайта:
// connect from node
var pubsub = require('pubsub.io').connect('hub.pubsub.io/238258');
// or the browser
var pubsub = pubsubio.connect('hub.pubsub.io/238258');
pubsub.subscribe({
hello:{$any:['world','mundo','verden']}
}, function(doc) {
console.log(doc);
});
pubsub.publish({hello:'world'});
Такого рода запросы к каналам вполне могут быть тем, что мы начинаем видеть больше.