Я немного искал Flume's HttpSource internals, пытаясь выяснить, как используется сервер Jetty.Flute's HttpSource: сервер Jetty multithread?
Я видел, что используется один элемент списка соединителей; этот соединитель будет прослушивать входящие соединения Http на сконфигурированном хосте и порту Http. Затем создается контекст для корневого пути, и в этот Контекст добавляется HttpServlet, содержащая логику, которая должна быть выполнена при получении соединения. Наконец, запускается сервер Jetty.
Connector[] connectors = new Connector[1];
if (sslEnabled) {
SslSocketConnector sslSocketConnector = new HTTPSourceSocketConnector(excludedProtocols);
...
connectors[0] = sslSocketConnector;
} else {
SelectChannelConnector connector = new SelectChannelConnector();
...
connectors[0] = connector;
}
connectors[0].setHost(host);
connectors[0].setPort(port);
srv.setConnectors(connectors);
try {
org.mortbay.jetty.servlet.Context root = new org.mortbay.jetty.servlet.Context(srv, "/", org.mortbay.jetty.servlet.Context.SESSIONS);
root.addServlet(new ServletHolder(new FlumeHTTPServlet()), "/");
HTTPServerConstraintUtil.enforceConstraints(root);
srv.start();
...
Вопрос в том, видел ли описанный выше вариант: создает ли такой сервер Jetty поток для каждого входящего соединения Http? Или же уникальный HttpServlet обслуживает все запросы по очереди последовательно?
Спасибо за помощь!
Спасибо за ответ, Joakim, но код, который я опубликовал, не мой, а тот, который реализует класс «HTTPSource» Apache Flume. Вот почему мне хотелось узнать, обслуживается ли несколько соединений параллельно с таким кодом. – frb
«служил параллельно» - это смутное описание. это может означать много разных вещей в зависимости от контекста. но если вы обеспокоены потоками с Flume, тогда предположите худший сценарий (1 поток на соединение + 1 поток на пару запроса/ответа в этом соединении) только потому, что реализация настолько старая. –
Также обратите внимание: https://issues.apache.org/jira/browse/FLUME-2698 –