对于我来说,在读取请求体之前,所有的数据都存储在哪里,这对我来说非常有趣。
例如,一个文件正在上传到服务器。Java程序接收这个文件。如果文件很大- 100 GB,就不可能将整个文件内容存储在缓冲区中。
Java是否从远程计算机中流这个文件?我的意思是远程计算机发送一小部分数据,Java接收到这一部分并等待下一部分。当远程计算机决定服务器读取第一部分时,它发送第二部分数据等。
Java及其HttpServer是以这种方式工作,还是像Apache+PHP一样将整个文件存储在磁盘上?
发布于 2013-12-18 12:46:34
您要寻找的机制由操作系统的TCP堆栈实现。在发送端和接收端都使用缓冲区。
TCP通常类似于接收机器对发送者的回复,"OK,got,now,send the next part" (也称为ACK数据包)。这种机制还可以根据连接的速度来调整传输速度(而不是发送数据太快,导致数据包丢失)。
这是一台润滑良好的机器,但如果出了问题,它通常表现为超时。(在您的示例中,如果您在处理请求体之前等待了很长时间,而不是读取,那么发送机器就会放弃)。
https://stackoverflow.com/questions/19320812
复制相似问题