我有一个 Node 服务器,它使用 Sockets.io 和 ntwitter 在客户端连接时向客户端发送流式推文。目前,所有推文(来自不同用户)都会发送给每个客户。但是每个客户端只需要某个推文子集,我希望服务器只发送该子集(或类别)。
我认为让每个类别都像一个房间,在 Sockets 中,会起作用,但我不能完全弄清楚如何调整我的代码来使用它们。或者,鉴于客户端之间没有通信,也许这不是最好的解决方案?
当前代码的相关简化位...
客户:
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()
部分目前正在向所有客户发送每条推文。然后客户决定是否显示该推文,如果它在客户的类别中。如果服务器只向正确类别的客户端发送推文,显然会更有效率。鉴于服务器已经知道哪些推文属于哪些类别,我如何只将它们发送到这些类别,而不是每个客户端?