Я пишу службу, используя TomCat, и пытаюсь понять функцию конвейерной обработки HTTP1.1 и ее реализацию в Tomcat.
Вот мои вопросы:
1] Конвейерная обработка в TomCat параллельно. i.e => После того, как он получит конвейерный запрос, он разбивает его на отдельные запросы и вызывает все это параллельно? Вот небольшой тест, который я сделал: судя по моим тестам, похоже, но я пытаюсь найти авторитетный документ и т. д.?
public static void main(String[] args) throws IOException, InterruptedException
{
Socket socket = new Socket();
socket.connect(new InetSocketAddress("ServerHost", 2080));
int bufferSize = 166;
byte[] reply = new byte[bufferSize];
DataInputStream dis = null;
//first without pipeline - TEST1
// socket.getOutputStream().write(
// ("GET URI HTTP/1.1\r\n" +
// "Host: ServerHost:2080\r\n" +
// "\r\n").getBytes());
//
// final long before = System.currentTimeMillis();
// dis = new DataInputStream(socket.getInputStream());
// Thread.currentThread().sleep(20);
// final long after = System.currentTimeMillis();
//
// dis.readFully(reply);
// System.out.println(new String(reply));
//now pipeline 3 Requests - TEST2
byte[] request = ("GET URI HTTP/1.1\r\n" +
"Host:ServerHost:2080\r\n" +
"\r\n"+
"GET URI HTTP/1.1\r\n" +
"Host: ServerHost:2080\r\n" +
"\r\n"+
"GET URI HTTP/1.1\r\n" +
"Host: ServerHost:2080\r\n" +
"\r\n").getBytes();
socket.getOutputStream().write(request);
bufferSize = 1000*1;
reply = new byte[bufferSize];
final long before = System.currentTimeMillis();
dis = new DataInputStream(socket.getInputStream());
Thread.currentThread().sleep(20);
final long after = System.currentTimeMillis();
dis.readFully(reply);
System.out.println(new String(reply));
long time = after-before;
System.out.println("Request took :"+ time +"milli secs");
}
В приведенном выше тесте в test2 время отклика не [20 * 3 = 60+ мс]. Фактический запрос GET выполняется очень быстро. Это намекает на то, что они распараллеливаются, если я что-то не упустил?
2] Какова глубина конвейера по умолчанию в Tomcat? Как я могу это контролировать?
3] При разрешении конвейерной обработки на стороне сервера для моей службы нужно ли мне учитывать что-либо еще, предполагая, что клиент следует http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.1.4 при обработке конвейерной обработки? Любой опыт приветствуется.