Как JVM может реагировать на запросы пользователей - PullRequest
0 голосов
/ 15 марта 2020

Давайте возьмем, например, приложение Spring, которое встроено в какой-то контейнер Tomcat. Я знаю, что Spring использует сервлеты под маской, но я хочу понять, как это работает внутренне, с точки зрения JVM. Что напрямую связывается с JVM?

Автономный случай приложения "stati c" прост, поскольку код компилируется один раз, байт-код интерпретируется JVM / компилируется JIT, класс загружается и взаимодействие с внешним интерфейсом отсутствует. мир - мы можем сказать, что приложение «вызывается один раз» при запуске.

Но когда дело доходит до приложения, которое может иметь некоторое взаимодействие с пользователем и т. д., работает в l oop, используя, например, пружину, как JVM знает, что некоторые методы были вызваны с помощью запроса "localhost: 8080 / users"? JVM прослушивает какой-то порт? Чтение из сокета? Какой компонент отвечает за это?

Буду очень признателен за написание всего пути от запуска приложения, пользовательского запроса до взаимодействия с JVM и того, что с ним происходит.

1 Ответ

0 голосов
/ 16 марта 2020

Во-первых, ваш вопрос очень широкий и не подходит для StackOverflow.

Короче говоря, JVM ничем не отличается от других процессов операционной системы. Вы (или ваш поставщик) пишете код Java / C / Go / Python / любой другой, который прослушивает сокет .

Когда приходит входящий сетевой запрос, операционная система «уведомляет» процесс (вашу запущенную программу) о наличии новых данных, чтобы она могла их интерпретировать и реагировать любым способом (например, сохранять пользовательские данные в базы данных и возврата правильного ответа).

Код Java / JVM для взаимодействия со спецификациями операционной системы c, такими как сокеты , записан в собственном коде ( это C / C ++) и предоставляется JVM вашей программе Java через оболочки («нативные методы»). Например, есть внутренний класс PlainSocketImpl.java с набором собственных методов, реализованных в соответствующем собственном коде PlainSocketImpl.c: https://github.com/AdoptOpenJDK/openjdk-jdk14/blob/master/src/java.base/unix/native/libnet/PlainSocketImpl.c (например, реализация socketAccept: https://github.com/AdoptOpenJDK/openjdk-jdk14/blob/master/src/java.base/unix/native/libnet/PlainSocketImpl.c)

Я предлагаю вам найти хороший ресурс по общему программированию сокетов; Вы можете найти эти полезные:

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