这里的规范示例是Twitter的API。我从概念上理解REST API是如何工作的,本质上它只是对服务器的查询,以便您接收响应(JSON,XML等)的特定请求,非常好。
但是我不确定流媒体API如何在幕后工作。我理解如何消费它。例如,Twitter听取回复。从响应中听取数据,并在其中发送推文。在字符串缓冲区中构建块并等待表示Tweet结束的换行符。但他们正在做些什么才能使这项工作?
假设我有一堆数据,我想在本地设置一个流API,供网络上的其他人使用(就像Twitter一样)。这是怎么做的,有哪些技术?这是Node JS可以处理的吗?我只是想绕过他们正在做的事情来使这件事发挥作用。
答案 0 :(得分:21)
Twitter的流API是它本质上是一个长时间运行的请求,它保持打开状态,数据在它可用时被推送到它。
这反映出服务器必须能够处理大量并发的开放HTTP连接(每个客户端一个)。许多现有的服务器管理得不好,例如Java servlet引擎为每个请求分配一个线程,这可能会(a)变得非常昂贵,并且(b)快速达到正常的最大线程设置并阻止后续连接。
正如您所猜测的那样,Node.js模型比使用servlet模型更符合流式连接的想法。请求和响应都作为Node.js中的流公开,但不占用整个线程或进程,这意味着只要数据保持打开状态就可以继续将数据推送到流中,而不会占用过多的资源(尽管如此是主观的)。理论上,您可以将大量并发的开放响应连接到单个进程,并且只在必要时写入每个进程。
如果您尚未查看,HTTP docs for Node.js可能有用。
我还会看一下technoweenie's Twitter client,看看使用Node.js the stream() function in particular看看该API的消费者端是什么样的。