我已经实现了一个关于从客户端上传大文件(大多数场景超过 1 GB)到服务器的应用程序。
- 在客户端,我使用 HTML5 File API,将文件切片(我测试过 1MB/5MB/10MB)并通过 WebSocket 上传。
- 在服务器中使用 tornado 作为 websocket 服务器。我们的客户不允许使用applet之类的插件,而且http-upload在我们的场景中也不合适,所以我必须选择HTML5和websocket。
我的问题是这个过程太慢了。以传输一个 40 MB 的文件为例,大约需要 40 秒。
- 在客户端和服务器中处理数据(编码、解码等)大约需要 5 秒。
- 从 websocket 客户端传输数据到 websocet 服务器大约需要 35 秒。
谁能告诉我有什么问题?
我的服务器端代码使用了 python-tornado,非常简单:
application = tornado.web.Application([(r'/litevirt-websocket/realtime/',RealtimeHandler),],**settings)
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()
我的客户端代码只使用了标准的 HTML5 File API,这里不需要附加。