在我们的应用程序中流式传输某些文件时,我们遇到了一些奇怪的问题。经过大量测试后,我们将其范围缩小到似乎是 lighttpd 和 Droid 之间的某种问题,这不仅是我们的应用程序,还包括内置播放器。
如果您将 Droid 浏览器指向http://stream29l.grooveshark.com/collinSong.mp3,它将不起作用。在http://staging.api.grooveshark.com/collinSong.mp3上托管在 Apache 上的相同文件完美地流式传输。这些文件是相同的。这两个 URL 都适用于运行 1.5 和 1.6 的其他手机,以及运行 2.0.1 的模拟器。
无论是通过 wifi 还是通过 3G 播放,lighttpd URL 都会失败。
我的猜测是,在 Droid 无法容忍的网络级别上发生了一些奇怪的事情,但我已经无法调试了。有任何想法吗?
更新:我在运行 CentOS 的笔记本电脑上安装了 lighttpd 并将其设置为提供相同的文件(抱歉,外部世界无法访问)并且 Droid 可以很好地为它们提供服务。这一定是我们服务器的特定配置问题,或者是 lighttpd 版本的差异。现在我的笔记本电脑运行的是 1.4.22,我们的生产服务器运行的是 1.5.0。我们的生产服务器还具有以下配置集,这给我的笔记本电脑设置带来了问题(注意:我可能缺少模块等):
server.max-fds = 7000
server.network-backend = "gthread-aio"
server.stat-cache-engine = "fam"
服务器还安装了这些附加模块:
"mod_proxy_core",
"mod_proxy_backend_http",
"mod_proxy_backend_fastcgi",
我将尝试让模块和配置匹配 100%,看看明天是否会重现问题。如果没有,我会尝试将我的笔记本电脑升级到 1.5.0,看看是否可以。
同时,有人知道与上述配置相关的问题吗?
更新 2: 我在笔记本电脑上升级到 1.5.0,流式传输 collinSong.mp3 仍然有效。添加: server.network-backend = "gthread-aio" 没有中断流。然而,这一行做了: server.stat-cache-engine = "fam"
注释掉上面的行会使我的笔记本电脑上的流式传输工作,并且启用它会使其无法工作。实际上,我让我们的管理员从配置中删除了该行并重新启动 lighty(他说我们无论如何都不需要该设置),但问题仍然存在。
所以接下来我尝试在我的笔记本电脑上注释掉 stat-cache-engine 并添加这些行:“mod_proxy_core”、“mod_proxy_backend_http”、“mod_proxy_backend_fastcgi” 在启用这些功能后,我的笔记本电脑上的流式传输再次中断,并且在我关闭它们时工作。不幸的是,我们在服务器上使用的线程模型显然需要这些,所以我无法尝试在生产中关闭它们。我不知道这是否会给其他人提供任何线索,但这就是我所拥有的。
我很想与摩托罗拉的开发人员取得联系,因为这似乎是该平台的一个错误;适用于其他安卓设备、PC、iPhone、黑莓和诺基亚手机,但不适用于 Droid。