注意:用 Scala 表示。使用 aBufferedReader
处理压缩后的 HTTP 流并遍历每一行以读取传入数据。问题是,如果由于网络 I/O 问题(提供商有时会做奇怪的事情)而重置连接,那么我可以看到连接在超时前保持打开状态长达 15 秒,这是我想要的降至 1 秒。出于某种原因,我们的办公室提供商每 11 小时重置一次连接。
这是我处理连接的方式:
val connection = getConnection(URL, USER, PASSWORD)
val inputStream = connection.getInputStream()
val reader = new BufferedReader(new InputStreamReader(new StreamingGZIPInputStream(inputStream), GNIP_CHARSET))
var line = reader.readLine()
while(line != null){
parseSupervisor ! ParseThis(line)
line = reader.readLine()
}
throw new ParseStreamCollapseException
这里getConnection
定义:
private def getConnection(urlString: String, user: String, password: String): HttpURLConnection = {
val url = new URL(urlString)
val connection = url.openConnection().asInstanceOf[HttpURLConnection]
connection.setReadTimeout(1000 * KEEPALIVE_TIMEOUT)
connection.setConnectTimeout(1000 * 1)
connection.setRequestProperty("Authorization", createAuthHeader(user, password));
connection.setRequestProperty("Accept-Encoding", "gzip")
connection
}
总结一下:通过java.io.BufferedReader
. 在流上保持活动状态为 16 秒,但为了防止进一步的数据丢失,我希望将其缩小到 1-2 秒(基本上检查流当前是否为空白或网络 I/O)。中间的某些设备每 11 小时终止一次连接,如果有一个有意义的解决方法来最大程度地减少数据丢失,那就太好了。在HttpURLConnection
连接上没有收到“终止信号”。
谢谢!