go 文件服务器问题
2016-07-13 本文已影响159人
stepyu
在调用go
语言编写的server
进行下载文件时出现
java.net.ProtocolException: unexpected end of stream
at com.squareup.okhttp.internal.http.HttpConnection$FixedLengthSource.read(HttpConnection.java:421)
java.io.IOException: unexpected end of stream
at com.squareup.okhttp.internal.http.HttpConnection$ChunkedSource.read(HttpConnection.java:467)
原因:
go server
响应时的逻辑是
n, err := io.Copy(w, f)
而go http
的底层tcp
连接设置了(timeout)
超时时间,由于文件过大或者并发过大,导致流没有复制完,所以出现上述报错
出现第一种报错是因为,在go server
端在上述代码前设置了content-length
而因为有content-length
,所以调用read
的具体方法不同
参见http://stackoverflow.com/questions/26096944/when-responding-using-io-copy-who-should-be-responsible-for-the-error