【发布时间】:2010-12-29 07:30:27
【问题描述】:
在我们的应用程序中流式传输某些文件时遇到了一些奇怪的问题。经过大量测试后,我们将其范围缩小到似乎是 lighttpd 和 Droid 之间的某种问题,这不仅是我们的应用,还包括内置播放器。
如果您将 Droid 浏览器指向 http://stream29l.grooveshark.com/collinSong.mp3,它将不起作用。托管在 Apache 上 http://staging.api.grooveshark.com/collinSong.mp3 的同一个文件完美流式传输。这些文件是相同的。这两个 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” 启用这些功能后,我的笔记本电脑上的流媒体再次中断,并且在我关闭它们时可以正常工作。不幸的是,我们在服务器上使用的线程模型显然需要这些,所以我无法尝试在生产中关闭它们。我不知道这是否会给其他人提供任何线索,但这就是我所拥有的。
我很想与摩托罗拉的一位开发人员取得联系,因为这似乎是该平台的一个错误;在其他 Android 设备、PC、iPhone、Blackberries 和诺基亚手机上运行良好,但在 Droid 上不运行。
【问题讨论】:
-
您可能想检查两个 Web 服务器都实现了哪种类型的 http。也许他们在标头中返回了不同的信息,这就是它在 Apache 上工作的原因。
-
我希望有比我更先进的网络技能的人可以尝试,因为据我所知,他们是相同的......
-
请注意,这两个链接在 Nexus One 上似乎都可以正常工作。
标签: android networking lighttpd