min*_*das 12 java iphone streaming http ipad
我正在测试支持HTTP字节范围请求的HTTP servlet实现(由BalusC共享).
我发现不同的HTTP客户端之间存在一些特殊的差异,并且想知道我是否遗漏了任何东西.我使用了> 2G mp4视频文件进行测试,并使用Wireshark捕获数据包.这大致是发生的事情:
三星Galaxy SII:
[0; <almost the end of the file>]每个后续块在同一HTTP响应的范围内提供.没有发送新的HTTP请求(除非视频被快速转发到某个位置).该流码块是相当简单,它读取RandomAccessFile input和写入OutputStream output通过byte[] buffer:
while ((read = input.read(buffer)) > 0) {
output.write(buffer, 0, read);
}
Run Code Online (Sandbox Code Playgroud)[0; <almost the end of the file>]GET请求.例如,新的范围边界[100, almost the end of the file].视频显示正常.我没有调查连接的确切方式.可能是iPad停止发送TCP ACK数据包,我想这并不重要.
我的问题是,对于每个终止的连接,我都会遇到java.net.SocketException: Broken pipe异常.这不仅会污染日志(这是一个小问题/可解决的问题),但我相信这会影响性能,因为提高异常是非常昂贵的.在观看简单视频时,异常率约为1个异常/秒,但如果服务器有100个并发用户,则JVM可能会花费大量时间来计算堆栈跟踪而不是实际工作.
我也使用iOS 6在iPhone上进行了测试,并且能够观察到与iPad 1相同的行为.重申一下,这不会发生在三星Android或我尝试过的任何桌面浏览器上,包括桌面Mac上的Safari.
问题:
| 归档时间: |
|
| 查看次数: |
4258 次 |
| 最近记录: |