JVM如何响应用户的请求

问题描述 投票:0回答:1

例如,以嵌入在某些tomcat容器中的spring应用程序为例。我知道spring在其遮罩下使用servlet,但是我想从JVM的角度了解它在内部如何工作。什么直接与JVM通信?

独立的“静态”应用程序案例很简单,因为代码只编译一次,字节码由JVM解释/由JIT编译,类被加载并且与外界没有任何交互-我们可以说应用程序“被调用了一次”开始。

但是,当涉及到可以与用户进行某种交互的应用程序等时,即使用spring循环运行,JVM如何知道某些方法是通过请求“ localhost:8080 / users”来调用的? JVM正在侦听某些端口?从套接字读取?哪个组件负责?

我非常感谢您编写从应用程序的开始,用户请求到与JVM的交互以及所发生的事情的整个路径。

java servlets jvm
1个回答
0
投票

首先,您的问题非常广泛,不适合StackOverflow。

简而言之,这里的JVM与其他任何操作系统进程都不一样。您(或您的供应商)编写一个Java / C / Go / Python /随便在socket上监听的代码。

[当收到传入的网络请求时,操作系统会“通知”进程(正在运行的程序)新数据,以便它可以解释它并以所需的任何方式做出反应(例如将用户数据保存到数据库中并返回适当的回应)。

用于与诸如sockets之类的特定于操作系统的设施进行交互的Java / JVM代码是用native代码(即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

我建议您找到有关通用套接字编程的好资源;您可能会发现这些有用:

© www.soinside.com 2019 - 2024. All rights reserved.