日期:2014-05-17  浏览次数:20709 次

请教tomcat http上传的带宽资源分配问题
背景:tomcat作为应用的web容器,struts+spring构建的服务器应用。

问题:

1. 客户端IE等通过form(multipart/form-data)提交文件上传请求时,如果服务器开始接受请求后,对于服务器来说是走的是下行线路,对吗? 服务器的下行线路不会对服务器的上行线路带来阻塞,对吗?

2. 假设服务器下行实际传输值最大为(50KB/s),10个客户端同时上传文件时(假设每个客户端的上行实际传输值最大也为50KB/s,文件大小为50MB),tomcat会自动均分服务器的下行带宽吗(既每个客户端的上传速度为5KB/s左右)?或者是tomcat会根据请求的先后顺寻产生阻塞(既第一个上传完了,才轮到第二个)?

3. 另外我在自己测试的时候发现,通过java文件输出流的每次写入长度来控制文件的上传速度不可行。测试的结果给我的感觉是如果java的文件写入速度低于客户端的上传速度,web容器会先将带写入的内容缓存起来,我这个理解对吗?

求大虾解答。

------解决方案--------------------
问题1:
对于服务器来说,是下行线路,也就是下载。
下行线路可能会对上行线路带来阻塞,分两种情况:一种是线路本身是复用的(少);另一种是下行被阻塞导致服务器发送出去的数据包(上行)收不到对方的确认信息(下行),而导致上行数据的阻塞。第二种情况中,上行线路虽然很空闲,但其实服务器无法有效发送数据,因为服务器以为所有发出去数据包全丢失了(收不到确认信息)。


问题2:
系统会自动分配服务器的下行带宽,但未必是均分,因为还要看对方的上行带宽;总的来说是个多种因素共同作用的结果;而Tomcat在带宽分配过程中并不实际发生任何作用。
当然,如果你的Tomcat线程池只配置了1条线程,那么大家肯定是排队了;这里我假定线程充裕。

问题3:
操作系统级别就已经会做缓冲了,Web容器也会做缓冲,当然两者的缓冲都有限,如果你愣是不处理的话,缓冲满了对方也会卡住。