Конвейер в Tomcat - параллельный? - PullRequest
4 голосов
/ 21 апреля 2011

Я пишу сервис с использованием TomCat и пытаюсь понять функцию конвейерной передачи HTTP1.1 и ее реализацию в Tomcat.

Вот мои вопросы:

1]TomCat параллельно.ie => После получения конвейерного запроса он разбивает его на отдельный запрос и вызывает все это параллельно?Вот небольшой тест, который я сделал: из моих тестов это выглядит так, но я пытаюсь найти авторский документ и т. Д.

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 при обработке конвейера?Любой опыт приветствуется.

Ответы [ 2 ]

1 голос
/ 04 октября 2011

Концепция конвейеризации говорит о том, что мы должны иметь возможность принимать запросы в любой момент времени, но обработка запросов происходит в том порядке, в котором мы их получаем. То есть параллельная обработка не происходит

1 голос
/ 05 мая 2011

У меня был похожий вопрос о том, как работает Apache, и после выполнения нескольких тестов я могу подтвердить, что Apache действительно ожидает каждого запроса для обработки, прежде чем приступить к обработке следующего, поэтому обработка SEQUENTIAL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...