Потоковое вещание в реальном времени для каждого пользователя через некоторый сервер 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'});

Такого рода запросы к каналам вполне могут быть тем, что мы начинаем видеть больше.

Другие вопросы по тегам