Во-первых, чтобы получить org.eclipse.jetty.server.Request
от javax.servlet.HttpServletRequest
, просто используйте ...
Request baseRequest = Request.getBaseRequest(httpServletRequest);
Но это не даст вам слишком далеко.
org.eclipse.jetty.server.HttpChannel
и org.eclipse.jetty.io.EndPoint
не предоставляют приложениям интерфейсы или поведение NIO.
Это внутренние классы, которые реализуют поведение HTTP spe c через один интерфейс для обработки такие вещи, как ...
- Кодировки передачи
- Кодирование
- Кодировки содержимого
- Gzip
- Многочастное кодирование
- et c ..
И это именно то, что HTTP / 1.1 приносит в таблицу, если вы начинаете использовать HTTP / 2, все становится еще сложнее (с физическим соединением, контролирующим много виртуальных потоки).
Но что, если вы не хотите использовать или заботиться о HTTP?
Вы можете обновить соединение и выйти из-под HTTP, используя свой собственный Connection
object.
jettyEndPoint.setConnection(myConnection);
jettyEndPoint.upgrade(myConnection);
Не забудьте реализовать Connection.UpgradeTo
, чтобы получить устаревшие (необработанные) байты из p rior connection.
Но это все равно не дает вам NIO, поскольку EndPoint
не освобожден от Jetty, и он по-прежнему управляет селектором и ведет протокол низкого уровня. (например, поток из HTTP / 2)
Хорошо, вернемся к HTTP, какие опции у вас остались?
Ничего, что раскрывает или позволяет управлять селектором NIO.
Вы должны были бы подделать селектор для j ruby.
Если вы хотите придерживаться HTTP, то используйте сервлет spe c Asyn c поведения ввода / вывода в качестве вашей стороны Jetty Уровень API.
Если вы не хотите придерживаться HTTP, то обновите соединение с HTTP, просто убедитесь, что вы говорите это в HTTP-разговоре, сначала используя соответствующие заголовки (например: Connection: upgrade
) .