0

Twitter 实现了一个流式 API,以 JSON blob 的形式一次提供一条推文。此外,诸如 Python 之类的库requests可以像这样使用它,

import json
import requests

r = requests.get('http://httpbin.org/stream/20', stream=True)

for line in r.iter_lines():

    # filter out keep-alive new lines
    if line:
        print json.loads(line)

我如何在服务器端实现可以以相同方式使用的东西?理想情况下,使用类似的东西bottle

4

2 回答 2

0

server.py

import gevent.monkey; gevent.monkey.patch_all()

import itertools
import json
import random
import time

import bottle


@bottle.get("/foo")
def foo():
  for i in range(5):
    o = {"i": i, "r": random.random()}
    print 'sending: {}'.format(o)
    yield json.dumps(o) + "\n"
    time.sleep(1)


if __name__ == '__main__':
  bottle.run(
    host="localhost",
    port=1234,
    server="gevent"
  )

client.py

import json
import pprint
import sys

import requests


def main(url):
  print 'Reading from {}'.format(url)
  for line in requests.get(url, stream=True).iter_lines(chunk_size=1):
    pprint.pprint(json.loads(line))
  print 'All done.'


if __name__ == '__main__':
  main(sys.argv[1])

用法,

$ python server.py &
$ python client.py http://localhost:1234/foo
于 2013-10-02T19:22:40.257 回答
0

可以致力于制作一个基于 uri 滚动数据流的模块 - 而不是使其成为 RESTful。

例如 //site.org/stream/40/

有几种方法可以与 HTTP 库进行通信,例如 curl 或 requests。一种基本方法是接受收件人的 POST 数据,将其存储在具有唯一 ID 的数据库中并等待响应。您可以使用 javascript 的 xhr 来确定响应是否已准备好。

总而言之,无论您使用 django、bottle 等,后端都应该是一个 python 模块。由您决定。

希望有帮助。

于 2013-09-25T01:09:05.790 回答