我正在 HTTP 服务器上做一些基准测试。为了避免与 HTTP 库的潜在冲突,我直接使用 Socket 打开连接,没有 HTTP 持久连接。
Java 代码打开并连接InputStream
到已加载的 HTTP 服务器的套接字上。它在 Linux 上运行。
我看到这两种情况都可能发生:
代码遵循标准,添加了一些时序代码:
final byte[] buffer = new byte[8192];
int size = inputStream.read(buffer);
while (size > 0) {
// Copy the buffer
size = inputStream.read(buffer);
}
Run Code Online (Sandbox Code Playgroud)
read
在您已经收到服务器将要发送的所有数据之后,您正在调用。这是个错误。收到完整回复(由 HTTP 协议确定)后,您应该停止调用read
. 您正在等待连接超时,这很愚蠢。
HTTP 协议会告诉您何时收到完整回复,而不是 TCP 协议。您期望 TCP 堆栈理解 HTTP。它不是。它不知道您何时收到完整答复。
归档时间: |
|
查看次数: |
2131 次 |
最近记录: |