每个用户通过某些 Comet 服务器进行实时流式传输
Posted
技术标签:
【中文标题】每个用户通过某些 Comet 服务器进行实时流式传输【英文标题】:Realtime Streaming per User via some Comet Server 【发布时间】:2011-11-27 06:32:25 【问题描述】:我需要设计一个 Streaming API,其中每个连接的用户可能在每个类别中都有不同的数据。
假设有两个用户对来自流 api 的运动(类别)RSS 提要感兴趣,但每个用户在服务器上都有自己的过滤机制,这会导致不同的推送数据集...
通过使用 juggernaut ,您可以通过类别(通道)流式传输数据,但我找不到根据用户过滤器设置在服务器端过滤每个类别的部分数据的方法。
【问题讨论】:
【参考方案1】:频道通常用于过滤数据,即一个用于 /SPORT/FOOTBALL/PREMIERLEAGUE/MANU,另一个用于 /SPORT/FOOTBALL/CHAMPIONSHIP/WETHAM 和 /SPORT/GOLF/USMASTERS。
我只知道一个实时 Comet 服务器,它通过订阅频道提供额外的过滤,那就是 Caplin System's Liberator。例如(伪代码):
var subscriber = new Subscriber();
var filter = "headline~transfer"; // where '~' means contains
subscriber.subscribe("/SPORT/FOOTBALL/PREMIERLEAGUE/MANU", filter, function(update)
// handle update
);
上面的代码将订阅频道,但只在更新出现时发送更新,headline
字段包含文本 transfer
。
似乎提供此查询功能的另一个解决方案是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');
这种渠道查询很可能是我们开始看到更多的东西。
【讨论】:
以上是关于每个用户通过某些 Comet 服务器进行实时流式传输的主要内容,如果未能解决你的问题,请参考以下文章
高并发实时弹幕系统 并发数一定是可以进行控制的 每个需要异步处理开启的 Goroutine(Go 协程)都必须预先创建好固定的个数,如果不提前进行控制,那么 Goroutine 就随时存在爆发的可