<p>虽然我不能为您编写所有的代码(这很复杂),下面是我推荐的设置。在</p>
<ol>
<li><p>使用Tornado+Django:Tornado可以嵌入WSGI进程,因此这使您能够拥有一个单独的进程宿主Django和这个一次性的Tornado处理程序。下面是我的一个活动项目的一个快速示例(虽然这个项目使用了龙卷风作为插座.io汉德勒,它应该告诉你解决方法的要点(:</p>
<pre><code># Socket Server
db = momoko.Pool(DB_DSN, **DB_CONFIG)
router = tornadio2.TornadioRouter(QueryRouter, user_settings={'db':db})
sock_app = tornado.web.Application(router.urls, flash_policy_port = FL_PORT, flash_policy_file = path.join(PROJECT_ROOT, 'assets/xml/flashpolicy.xml'), socket_io_port = WS_PORT, debug=True)
# Django Server
os.environ['DJANGO_SETTINGS_MODULE'] = 'sever.settings'
application = django.core.handlers.wsgi.WSGIHandler()
container = tornado.wsgi.WSGIContainer(application)
# Start the web servers
if __name__ == "__main__":
try:
import logging
tornado.options.parse_command_line()
logging.getLogger().setLevel(logging.INFO)
logging.info('Server started')
tornado.locale.set_default_locale('us_US')
http_server = tornado.httpserver.HTTPServer(container)
http_server.listen(8000)
tornadio2.SocketServer(sock_app, auto_start=True)
tornado.ioloop.IOLoop.instance().start()
except KeyboardInterrupt:
tornado.ioloop.IOLoop.instance().stop()
logging.info("Stopping servers.")
</code></pre></li>
</ol>
<p>这可以很容易地转换为在两个不同端口上运行的两个服务器实例,其中80个为Django保留,8080用于上载处理程序。在</p>
<ol>
<li><p>我推荐Tornado是因为它支持流式请求体,非常适合这种类型的使用。<a href="https://gist.github.com/sarva/1651121" rel="nofollow">Here's a gist that might help you</a>。</p></li>
<li><p>你的代理设置很重要。如果您正在使用NGINX,请确保关闭proxy_buffering。</p></li>
<li><p>我不会用数据库来检查机票/上传。Redis或memcache可能是处理这一问题的更快的方法。缓存也是在Django和Tornado之间来回上传进度的好方法,因为设置/获取新值的开销非常小。</p></li>
</ol>
<p>这是一个棘手的大问题,将严肃的工程设计出一些优雅的东西,但这是可行的。在</p>