摘要
收到前不久订阅的PythonWeekly发过来的一个邮件通知,由Miguel写的一篇介绍如何使用Flask搭建一个流媒体服务器的文章,思路很新颖也很有意思。你可以点击这里阅读英文原文。或者跟随本文跟我一起体验一把搭建一个流媒体服务器的过程吧。
理论基础
流媒体有两大特点,一是数据量大。二是有实时性要求。针对这两个特点,我们必须把应答数据分块传输给客户端来实现流媒体服务器。这里我们用到了两个关键技术来实现流媒体服务器,我们使用生成器函数来把数据分块传送,Flask的Response类本身对生成器函数有良好的支持。接着,我们使用Multipart来组装一个HTTP应答。
生成器函数
生成器函数是可被打断和恢复的函数。其关键字是yield,来看一个例子:
**def** gen():
**yield** 1
**yield** 2
**yield** 3
上面的代码我们就定义了一个生成器函数,当生成器函数被调用时,它返回一个生成器迭代器,或直接叫生成器。通过不断地调用生成器的next()方法来执行生成器函数体的代码,直到遇到异常为止。
>>>> g = gen()
>>> g
>>> g.next()
1
>>> g.next()
2
>>> g.next()
3
>>> g.next()
Traceback (most recent call last):
File "", line 1, **in**