我们有一个客户的要求,即为宽带用户提供拨号和所有花里胡哨的“精简版”版本。
该解决方案将使用 Flex/Flash/Java EJB 和一些 jsp。
Web服务器有没有办法区分两者?
你不关心用户的连接类型,你关心的是下载速度。
有一个小型的 Flash 应用程序,可以下载 Flash 的其余部分,并计算需要多长时间。或计算 Ajax 下载所需时间的 HTML 页面。
如果功能丰富的应用程序的下载时间过长,请将最初下载的存根页面/闪存重定向到慢速下载页面(或下载准系统闪存应用程序,或其他)。
最简单和最可靠的机制可能是让用户从下拉列表中选择他们的连接类型。很简单,我知道,但它可能会为你拯救一个悲伤的世界!
没有办法区分宽带或拨号作为连接类型,但您可以通过连接速度做出有根据的猜测。
Gmail 会执行此操作,并在检测到时提供指向其服务的基本 HTML 版本的链接。
(来源:nirmaltv.com)
我的猜测是对 AJAX 请求进行了一些客户端 javascript 轮询。如果周转时间超过阈值,则会出现切换到“精简”的选项。
这个选项最好的部分是你允许用户选择他们是否想使用精简版而不是强制他们。
我认为典型的方法就是询问用户。如果您不相信您的用户会提供准确的答案,我怀疑您将不得不编写一个在客户端上运行速度测试的应用程序。通常这些记录客户端接收 x 个字节需要多长时间,并使用它来确定带宽。
Actionscript 3 有一个库可以帮助您完成这项任务,但我相信它需要您在 Flash Media Server 上部署您的 flex/flash 应用程序。有关详细信息,请参阅ActionScript 3.0 本机带宽检测。
这是尝试类似操作的代码的简短代码片段。它在 C# 中,但很短,只是有趣的概念。
当然,它们可能是暂时的速度问题,与您测试时的用户连接等无关。
几年前我遇到了类似的问题,只是让用户在高带宽和低带宽站点之间进行选择。我在页面上加载的第一件事就是这个选项,所以他们可以快速前进。
@Apphacker(如果我有足够的声誉,我会发表评论而不是回答......):
也不能保证反过来——我有 Earthlink 拨号,很快就会升级到 Earthlink DSL(这就是这里可用的......)。
您可以检查他们的 IP 并查看它是否解析/分配给拨号提供商,例如 AOL、Earthlink、NetZero。不能保证那些不解决此类提供商的人是宽带用户。
你可以 ...
我认为速度测试应该足够了。
如果您只有一个小的知名用户组,有时可以通过 ip 确定连接速度。(一些提供商为拨号/宽带连接分配不同的子网)