Django + Coffeescript:使用io套接字的实时视频应用程序

时间:2011-11-21 21:33:01

标签: django coffeescript

我一直试图解决这个问题已经有两个星期了,但我还是找不到解决办法。 这是我想要做的:

我需要一个用户可以上传视频的网络应用程序;视频将使用opencv的python API进行转换。由于我使用Python的opencv API,我决定使用Django创建webapp。到目前为止一切都很好。

问题在于视频转换是一个非常漫长的过程,因此我尝试实现一些实时功能,以便在转换时向用户显示视频,换句话说,我转换帧并将其显示为用户inmediatly。我试图用CoffeScript和io套接字做一些例子;但是我没有成功。

我的问题是;将实时功能添加到Django应用程序的正确方法是什么?

2 个答案:

答案 0 :(得分:2)

我建议使用非django服务来处理websockets。正确设置websockets在客户端和服务器端都很棘手。请查看pusher.com以获得免费/廉价的解决方案,该解决方案可以正常工作并为您节省大量麻烦。

开始渲染的初始请求应启动长期存在的进程,并返回一个用于侦听websocket以进行更新的ID。

设置好websockets后,您可以向客户端发送有关每个完成帧的消息。就个人而言,我不会尝试将整个框架推向websocket,而只是发送一条消息,说框架是用URL完成的。然后普通的HTTP及其缓存和浏览器细节会移动大数据。

你绝对不会选择简单的道路。简单的路径是让您的长期渲染任务更新数据库中的渲染状态,并让客户端进行轮询。额外的服务器负载,但更简单。

答案 1 :(得分:1)

Django本身就专注于做一种Web接口,它遵循HTTP请求/响应模式。为了保持与客户端的持久连接,socket.io真的变得简单,你需要与普通的Django安装略有不同。

  1. This article在Orbited和Twisted的帮助下讨论了与Django实时交互的问题。它相当陈旧,它依赖于Comet,这不是现在做实时的首选方式。

  2. 您可以通过在客户端上使用Socket.io以及Tornadowiki)+ Tornado client for Socket.io之类的内容获益良多。但是,如果你真的想坚持使用Django进行Web开发(Tornado也提供),你需要在内部协同工作,每个都处理它们的特定用例。

  3. 最后,this other article讨论了如何让Django与gevent(一个基于协程的Python网络库)和Socket.io一起工作,否则这可能是你最好的选择。< / p>

  4. 随时弹出问题/评论,不要犹豫!