在NodeJS中的高性能video文件服务器

我想在NodeJS中构build一个高可用性和高性能的video文件服务器和stream媒体video。 基本上,我想知道:

  1. 在NodeJS中创buildvideo文件服务器有哪些可能的方法。
  2. 它会pipe理很多并发请求吗? 由于这是一个video文件,每个请求都花费时间来完全解决。
  3. 有没有其他的可能性使用另一个静态文件服务器。

请告诉我如何走上正确的道路。

videostream是关于大多数通过HTTP(s)高效的数据传输。 数据是你的文件,通过networking服务器传输的数据可能与NodeJS没有任何共享或任何后端处理。 这取决于需求,但数据作为文件通常直接提供给用户,而不通过后端传递。 否则,系统元件会变得耦合在一起,从而影响性能并增加熵。

build议分开保存系统部件,例如Nginx可以一次性处理authentication,授权和videostream,而不需要任何后端,这可以是一个很好的起点,而且绝对是真正的高性能。 检查这种方法 :

server { location /video/ { rewrite /video/([a-zA-Z0-9_\-]*)/([0-9]*)/(.*)\.flv$ /flv/$3.mp4?st=$1&e=$2; } location /mp4/ { internal; mp4; secure_link $arg_st,$arg_e; secure_link_md5 YOUR_SECRET_PASSWORD_HERE$arg_e$uri; } 

video文件的URL将通过基于特定algorithm的后端预生成,在这个例子中,它是通过Ruby完成的,但是在Bash上有一个例子 :

 echo -n '2147483647/s/link127.0.0.1 secret' | \ openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d = 

一旦你达到这个主要目标(video文件stream?),那么NodeJS或任何其他给定的技术可用于常见的任务,如增强authentication,授权,评论,共享和其他function。

正如在评论中已经提到的那样,还有其他一些可以使用videostream媒体服务器的选项( ngix模块似乎是非常合适的)。 尽pipe如此,如果你仍然想build立你自己的,使用node.js正确的工具似乎是BinaryJS 。 有一个相当直接的发展方式:

服务器

 var server = BinaryServer({port: 9000}); server.on('connection', function(client){ client.on('stream', function(stream, meta){ var file = fs.createWriteStream(meta.file); stream.pipe(file); }); }); 

文档和演示部分有相当好的文档logging,并且易于使用。

很多评论都是很好的build议。 在性能和可伸缩性方面,最大的瓶颈将是文件服务器。 我的build议是使用Couchbase。 由于其caching方法,它是性能最高的数据库,并且能够dynamic地将节点添加到群集。 在此之前我做了一些研究,因为id做的是“先拍后问”。 它将存储在RAM中收到的数据,报告成功,然后写入磁盘。 同样,它会保持经常访问的文件存储在RAM中,这将有助于提高性能,如果多个用户正在观看相同的video。 当一个节点被添加到集群时,它会自行发布并且它的对等节点会自动开始发送数据来平衡负载。 负载平衡也自动发生。

http://www.couchbase.com/

至于networking服务器使用任何的舒适。 Nginx会很好,NodeJS是为Couchbase设置的,Apache甚至IIS都可以。 首先select你想要的语言,然后根据这些选项select一个服务器。

最后,您可以检查预先存在的服务器端videostream代码库。 这样做可以节省很多头痛。