【发布时间】:2016-05-31 04:26:03
【问题描述】:
我正在尝试开发与 Twitter 的流 API (https://dev.twitter.com/streaming/reference/post/statuses/filter) 具有相同功能的数据流 API,即具有过滤功能的数据流。我正在生成大量数据并希望将其提供给客户。
我了解如何制作一个为所有客户提供相同数据的应用。这相对容易。我遇到的困难来自于允许客户指定数据过滤器并为每个客户提供独特的数据。
我的想法:
首先我想打开一个流式 http 请求(比如 Twitter)。我可以创建一个接受带有参数的 GET 请求的端点(例如https://stream.example.com/v1/filter.json?track=twitter)。根据这个答案Streaming API vs Rest API?,这不容易扩展并且需要大量资源。
然后我想使用 websockets 并让客户端提供过滤消息(例如位置=-122.75,36.8,-121.75,37.8)。但是,我找不到一个 WS 服务器向每个客户端发送唯一数据的好例子。如果这个类继承了 tornado.websocket.WebSocketHandler 或类似的实现会是什么样子?
我还考虑将数据推送到消息传递服务 (RabbitMQ) 或数据库 (Redis) 并在客户端连接到其唯一通道时订阅它们。 (我想像这个问题Any ideas how to create parameterised streaming api?)。我不知道创建独特频道的有效方法。这似乎也过于复杂了。
我更喜欢在 Python 中执行此操作,但我也会考虑使用 Ruby 和 JS 实现。
【问题讨论】:
标签: python ruby node.js api tornado