У меня есть сервер Node, который отправляет потоковые твиты клиентам по мере их подключения, используя Sockets.io и ntwitter. На данный момент все твиты (от разных пользователей) отправляются каждому клиенту. Но для каждого клиента требуется только определенный набор твитов, и я хотел бы, чтобы сервер отправлял только это подмножество (или категорию).Отправка подмножеств потоковых данных клиентам Node с использованием Sockets.io
I думаю, что каждая категория, похожая на комнату, в сокетах, будет работать, но я не могу точно определить, как адаптировать мой код для их использования. Или, учитывая, что между клиентами нет связи, может быть, это не лучшее решение?
Соответствующие, упрощенные, биты текущего кода ...
Клиент:
var socket = io.connect(window.location.hostname);
socket.on('messages', function(messages_packet) {
$.each(messages_packet, function(idx, tweet) {
if (tweet_is_in_this_clients_category(tweet)) {
display_messages(messages_packet);
};
}
});
Сервер:
// [A function which, on start-up, fetches existing tweets and caches them.]
// Send cached messages when a client connects.
sockets.sockets.on('connection', function(socket) {
socket.emit('messages', cached_messages);
});
// Fetch tweets from the stream, and send new ones to clients.
twitter.stream('statuses/filter', {follow: [12345, 345678, etc]}, function(stream) {
stream.on('data', function(tweet) {
add_tweet_to_cache(tweet);
sockets.sockets.emit('messages', [tweet]);
}
});
Итак, sockets.emit()
части в настоящее время отправки каждый твит, чтобы все клиентов. И затем клиент решает, показывать ли это твит, если он находится в категории клиента. Очевидно, что было бы более эффективно, если бы сервер отправлял только твиты клиентам в правильной категории. Учитывая, что сервер уже знает, какие твиты в каких категориях, как я могу испустить их только для этих категорий, а не для каждого клиента?