iPad编程 Java_java – 在iPad / iPhone上的HTTP字节范围协议客户端行为

我正在测试一个支持

HTTP byte range requests的

HTTP servlet implementation (kindly shared by BalusC).

我发现不同的HTTP客户端之间有一些特殊的区别,并且想知道我是否没有丢失任何东西.我使用了> 2G mp4视频文件进行测试,并且正在使用Wireshark捕获数据包.大致如此:

>三星Galaxy SII:

> HTTP GET请求文件来,要求字节范围[0; ]

>服务器响应,开始流文件

>每个后续组块在同一HTTP响应的范围内提供.没有发送新的HTTP请求(除非视频被快速转发到某个位置).流代码块很简单,它读取RandomAccessFile输入并通过byte []缓冲区写入OutputStream输出:

while ((read = input.read(buffer)) > 0) {

output.write(buffer,read);

}

> iPad 1

> HTTP GET请求文件来,开始流文件

> iPad获得一两块,然后单方面决定停止接收来自服务器的字节,并为文件的下一个块发出单独的GET请求.新的范围边界是例如[100,几乎结束文件].视频显示为OK.

>循环从步骤2再次重复.左边界总是向文件的末尾移动.

我没有调查连接是如何终止的.可能是iPad停止发送TCP ACK数据包,我想这并不重要.

我的问题是,对于每个终止的连接我得到java.net.SocketException:破坏管道异常.这不仅会污染日志(这是一个小问题/可解决的问题),但是我相信这会导致性能下降,因为引发异常是非常昂贵的.当观看简单的视频时,例外率约为1个异常/秒,但是如果服务器有100个并发用户,则JVM可能会花费大量的时间只是计算堆栈跟踪,而不是做实际工作.

我也使用iOS 6在iPhone上测试了这一点,并且能够观察到与iPad 1相同的行为.只是重申,这不会发生在三星Android或任何桌面浏览器我已经尝试,包括桌面Mac上的Safari.

问题:

这是iPad / iPhone的知识bug /功能吗?

有没有解决办法?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值