色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開源服務器Tomcat工作原理

馬哥Linux運維 ? 來源:掘金 ? 作者:VectorJin ? 2021-10-08 15:11 ? 次閱讀

Tomcat 是什么開源的 Java Web 應用服務器,實現了 Java EE(Java Platform Enterprise Edition)的部分技術規范,比如 Java Servlet、Java Server Page、JSTL、Java WebSocket。Java EE 是 Sun 公 司為企業級應用推出的標準平臺,定義了一系列用于企業級開發的技術規范,除了上述的之外,還有 EJB、Java Mail、JPA、JTA、JMS 等,而這些都依賴具體容器的實現。

e190ae88-2426-11ec-82a8-dac502259ad0.jpg

上圖對比了 Java EE 容器的實現情況,Tomcat 和 Jetty 都只提供了 Java Web 容器必需的 Servlet 和 JSP 規范,開發者要想實現其他的功能,需要自己依賴其他開源實現。

Glassfish 是由 Sun 公司推出,Java EE 最新規范出來之后,首先會在 Glassfish 上進行實 現,所以是研究 Java EE 最新技術的首選。

最常見的情況是使用 Tomcat 作為 Java Web 服務器,使用 Spring 提供的開箱即用的強大 的功能,并依賴其他開源庫來完成負責的業務功能實現。

Servlet 容器Tomcat 組成如下圖:主要有 Container 和 Connector 以及相關組件構成。

Server:指的就是整個 Tomcat 服 務器,包含多組服務,負責管理和 啟動各個 Service,同時監聽 8005 端口發過來的 shutdown 命令,用于關閉整個容器;

Service:Tomcat 封裝的、對外提供完整的、基于組件的 Web 服務, 包含 Connectors、Container 兩個核心組件,以及多個功能組件,各個 Service 之間是獨立的,但是共享 同一 JVM 的資源;

Connector:Tomcat 與外部世界的連接器,監聽固定端口接收外部請求,傳遞給 Container,并將 Container 處理的結果返回給外部;

Container:Catalina,Servlet 容器,內部有多層容器組成,用于管理 Servlet 生命周期,調用 servlet 相關方法;

Loader:封裝了 Java ClassLoader,用于 Container 加載類文件;

Realm:Tomcat 中為 Web 應用程序提供訪問認證和角色管理的機制;

JMX:Java SE 中定義技術規范,是一個為應用程序、設備、系統等植入管理功能的框架,通過 JMX 可以遠程監控 Tomcat 的運行狀態;

Jasper:Tomcat 的 JSP 解析引擎,用于將 JSP 轉換成 Java 文件,并編譯成 class 文件。

Session:負責管理和創建 Session,以及 Session 的持久化(可自定義),支持 Session 的集 群。

Pipeline:在容器中充當管道的作用,管道中可以設置各種 valve(閥門),請求和響應在經由管道中各個閥門處理,提供了一種靈活可配置的處理請求和響應的機制。

Naming:命名服務,JNDI, Java 命名和目錄接口,是一組在 Java 應用中訪問命名和目錄服務的 API。命名服務將名稱和對象聯系起來,使得我們可以用名稱訪問對象,目錄服務也是一種命名 服務,對象不但有名稱,還有屬性。Tomcat 中可以使用 JNDI 定義數據源、配置信息,用于開發與部署的分離。

Container 組成

Engine:Servlet 的頂層容器,包含一 個或多個 Host 子容器;

Host:虛擬主機,負責 Web 應用的部 署和 Context 的創建;

Context:Web 應用上下文,包含多個 Wrapper,負責 Web 配置的解析、管 理所有的 Web 資源;

Wrapper:最底層的容器,是對 Servlet 的封裝,負責 Servlet 實例的創 建、執行和銷毀。

生命周期管理

Tomcat 為了方便管理組件和容器的生命周期,定義了從創建、啟動、到停止、銷毀共 12 中狀態,Tomcat 生命周期管理了內部狀態變化的規則控制,組件和容器只需實現相應的生命周期 方法即可完成各生命周期內的操作(initInternal、startInternal、stopInternal、 destroyInternal)。

比如執行初始化操作時,會判斷當前狀態是否 New,如果不是,則拋出生命周期異常;如果是,則設置當前狀態為 Initializing,并執行 initInternal 方法,由子類實現,方法執行成功則設置當 前狀態為 Initialized,執行失敗則設置為 Failed 狀態。

Tomcat 的生命周期管理引入了事件機制,在組件或容器的生命周期狀態發生變化時會通知事件監聽器,監聽器通過判斷事件的類型來進行相應的操作。事件監聽器的添加可以在 server.xml 文件中進行配置。

Tomcat 各類容器的配置過程就是通過添加 listener 的方式來進行的,從而達到配置邏輯與容器的解耦。如 EngineConfig、HostConfig、ContextConfig。

EngineConfig:主要打印啟動和停止日志

HostConfig:主要處理部署應用,解析應用 META-INF/context.xml 并創建應用的 Context

ContextConfig:主要解析并合并 web.xml,掃描應用的各類 Eeb 資源(filter、servlet、listener)

Tomcat 的啟動過程

啟動從 Tomcat 提供的 start.sh 腳本開始,Shell 腳本會調用 Bootstrap 的 main 方法,實際調用了 Catalina 相應的 load、start 方法。

load 方法會通過 Digester 進行 config/server.xml 的解析,在解析的過程中會根據 xml 中的關系和配置信息來創建容器,并設置相關的屬性。接著 Catalina 會調用 StandardServer 的 init 和 start 方法進行容器的初始化和啟動。

按照 xml 的配置關系,server 的子元素是 service,service 的子元素是頂層容器 Engine,每層容器有持有自己的子容器,而這些元素都實現了生命周期管理 的各個方法,因此就很容易的完成整個容器的啟動、關閉等生命周期的管理。

StandardServer 完成 init 和 start 方法調用后,會一直監聽來自 8005 端口(可配置),如果接收到 shutdown 命令,則會退出循環監聽,執行后續的 stop 和 destroy 方法,完成 Tomcat 容器的關閉。同時也會調用 JVM 的 Runtime.getRuntime()?.addShutdownHook 方法,在虛擬機意外退出的時候來關閉容器。

所有容器都是繼承自 ContainerBase,基類中封裝了容器中的重復工作,負責啟動容器相關的組 件 Loader、Logger、Manager、Cluster、Pipeline,啟動子容器(線程池并發啟動子容器,通過線程池 submit 多個線程,調用后返回 Future 對象,線程內部啟動子容器,接著調用 Future 對象的 get 方法來等待執行結果)。

List《Future《Void》》 results = new ArrayList《Future《Void》》(); for (int i = 0; i 《 children.length; i++) { results.add(startStopExecutor.submit(new StartChild(children[i]))); } boolean fail = false; for (Future《Void》 result :results) { try { result.get(); } catch (Exception e) { log.error(sm.getString(“containerBase.threadedStartFailed”), e); fail = true; } }

Web 應用的部署方式注:

catalina.home:安裝目錄

catalina.base:工作目錄

默認值:user.dirServer.xml 配置 Host 元素,指定 appBase 屬性,默認 $catalina.base/webapps/

Server.xml 配置 Context 元素,指定 docBase,元素,指定 Web 應用的路徑

自定義配置在 $catalina.base/EngineName/HostName/XXX.xml 配置 Context 元素

HostConfig 監聽了 StandardHost 容器的事件,在 start 方法中解析上述配置文件:

掃描 appbase 路徑下的所有文件夾和 war 包,解析各個應用的 META-INF/context.xml,并創建 StandardContext,并將 Context 加入到 Host 的子容器中。

解析 $catalina.base/EngineName/HostName/ 下的所有 Context 配置,找到相應 Web 應用的位置,解析各個應用的 META-INF/context.xml,并創建 StandardContext,并將 Context 加入到 Host 的子容器中。

注:

HostConfig 并沒有實際解析 Context.xml,而是在 ContextConfig 中進行的。

HostConfig 中會定期檢查 watched 資源文件(context.xml 配置文件)

ContextConfig 解析 context.xml 順序:

先解析全局的配置 config/context.xml

然后解析 Host 的默認配置 EngineName/HostName/context.xml.default

最后解析應用的 META-INF/context.xml

ContextConfig 解析 web.xml 順序:

先解析全局的配置 config/web.xml

然后解析 Host 的默認配置 EngineName/HostName/web.xml.default 接著解析應用的 MEB-INF/web.xml

掃描應用 WEB-INF/lib/ 下的 jar 文件,解析其中的 META-INF/web-fragment.xml 最后合并 xml 封裝成 WebXml,并設置 Context

注:

掃描 Web 應用和 jar 中的注解(Filter、Listener、Servlet)就是上述步驟中進行的。

容器的定期執行:backgroundProcess,由 ContainerBase 來實現的,并且只有在頂層容器中才會開啟線程。(backgroundProcessorDelay=10 標志位來控制)

Servlet 生命周期

Servlet 是用 Java 編寫的服務器端程序。其主要功能在于交互式地瀏覽和修改數據,生成動態 Web 內容。

請求到達 server 端,server 根據 url 映射到相應的 Servlet

判斷 Servlet 實例是否存在,不存在則加載和實例化 Servlet 并調用 init 方法

Server 分別創建 Request 和 Response 對象,調用 Servlet 實例的 service 方法(service 方法內部會根據 http 請求方法類型調用相應的 doXXX 方法)

doXXX 方法內為業務邏輯實現,從 Request 對象獲取請求參數,處理完畢之后將結果通過 response 對象返回給調用方

當 Server 不再需要 Servlet 時(一般當 Server 關閉時),Server 調用 Servlet 的 destroy() 方法。

load on startup

當值為 0 或者大于 0 時,表示容器在應用啟動時就加載這個 servlet;當是一個負數或者沒有指定時,則指示容器在該 servlet 被選擇時才加載;正數的值越小,啟動該 servlet 的優先級越高。

single thread model

每次訪問 servlet,新建 servlet 實體對象,但并不能保證線程安全,同時 Tomcat 會限制 servlet 的實例數目。最佳實踐:不要使用該模型,servlet 中不要有全局變量。

請求處理過程

根據 server.xml 配置的指定的 connector 以及端口監聽 http、或者 ajp 請求

請求到來時建立連接,解析請求參數,創建 Request 和 Response 對象,調用頂層容器 Pipeline 的 invoke 方法

容器之間層層調用,最終調用業務 servlet 的 service 方法

Connector 將 response 流中的數據寫到 socket 中

Pipeline 與 Valve

Pipeline 可以理解為現實中的管道,Valve 為管道中的閥門,Request 和 Response 對象在管道中經過各個閥門的處理和控制。

每個容器的管道中都有一個必不可少的 basic valve,其他的都是可選的,basic valve 在管道中最后調用,同時負責調用子容器的第一個 valve。

Valve 中主要的三個方法:setNext、getNext、invoke。Valve 之間的關系是單向鏈式結構,本身 invoke 方法中會調用下一個 Valve 的 invoke 方法。

各層容器對應的 basic valve 分別是 StandardEngineValve、StandardHostValve、StandardContextValve、StandardWrapperValve。

JSP引擎

JSP 生命周期

編譯階段:servlet 容器編譯 servlet 源文件,生成 servlet 類

初始化階段:加載與 JSP 對應的 servlet 類,創建其實例,并調用它的初始化方法

執行階段:調用與 JSP 對應的 servlet 實例的服務方法

銷毀階段:調用與 JSP 對應的 servlet 實例的銷毀方法,然后銷毀 servlet 實例

JSP元素

代碼片段:《% 代碼片段 %》

JSP聲明:《%! declaration; [ declaration; ]+ 。.. %》

JSP表達式:《%= 表達式 %》

JSP注釋:《%-- 注釋 --%》

JSP指令:《%@ directive attribute=“value” %》

JSP行為:《jsp:action_name attribute=“value” /》

HTML元素:html/head/body/div/p/……

JSP隱式對象:request、response、out、session、application、config、 pageContext、page、Exception

JSP 元素說明

代碼片段:包含任意量的 Java 語句、變量、方法或表達式

JSP 聲明:一個聲明語句可以聲明一個或多個變量、方法,供后面的 Java 代碼使用

JSP 表達式:輸出 Java 表達式的值,String 形式;

JSP 注釋:為代碼作注釋以及將某段代碼注釋掉

JSP 指令:用來設置與整個 JSP 頁面相關的屬性:

《%@ page 。.. %》 定義頁面的依賴屬性,比如 language、contentType、errorPage、 isErrorPage、import、isThreadSafe、session 等等

《%@ include 。.. %》 包含其他的 JSP 文件、HTML 文件或文本文件,是該 JSP 文件的一部分,會被同時編譯執行

《%@ taglib 。.. %》 引入標簽庫的定義,可以是自定義標簽

JSP 行為:jsp:include、jsp:useBean、jsp:setProperty、jsp:getProperty、jsp:forward

JSP 解析過程

代碼片段:在 _jspService() 方法內直接輸出

JSP 聲明:在 servlet 類中進行輸出

JSP 表達式:在 _jspService() 方法內直接輸出

JSP 注釋:直接忽略,不輸出

JSP 指令:根據不同指令進行區分,include:對引入的文件進行解析;page 相關的屬性會做為 JSP 的屬性,影響的是解析和請求處理時的行為

JSP 行為:不同的行為有不同的處理方式,jsp:useBean 為例,會從 pageContext 根據 scope 的 類別獲取 bean 對象,如果沒有會創建 bean,同時存到相應 scope 的 pageContext 中

HTML:在 _jspService() 方法內直接輸出

JSP 隱式對象:在 _jspService() 方法會進行聲明,只能在方法中使用

Connector

HTTP,HTTP 是超文本傳輸協議,是客戶端瀏覽器或其他程序與 Web 服務器之間的應用層通信協議

AJP,Apache JServ 協議(AJP)是一種二進制協議,專門代理從 Web 服務器到位于后端的應用程序服務器的入站請求阻塞 IO

非阻塞 IO

IO 多路復用

阻塞與非阻塞的區別在于進行讀操作和寫操作的系統調用時,如果此時內核態沒有數據可讀或者沒有緩沖空間可寫時,是否阻塞。

IO 多路復用的好處在于可同時監聽多個 socket 的可讀和可寫事件,這樣就能使得應用可以同時監聽多個 socket,釋放了應用線程資源。

Tomcat 各類 Connector 對比

Connector 的實現模式有三種,分別是 BIO、NIO、APR,可以在 server.xml 中指定。

JIO:用 java.io 編寫的 TCP 模塊,阻塞IO

NIO:用 java.nio 編寫的 TCP 模塊,非阻塞 IO,(IO 多路復用)

APR:全稱 Apache Portable Runtime,使用 JNI 的方式來進行讀取文件以及進行網絡傳輸

Apache Portable Runtime 是一個高度可移植的庫,它是 Apache HTTP Server 2.x 的核心。APR 具有許多用途,包括訪問高級 IO 功能(如 sendfile,epoll 和 OpenSSL),操作系統級功能(隨機數生成,系統狀態等)和本地進程處理(共享內存,NT 管道和 Unix 套接字)。

表格中字段含義說明:

Support Polling:是否支持基于 IO 多路復用的 socket 事件輪詢

Polling Size:輪詢的最大連接數

Wait for next Request:在等待下一個請求時,處理線程是否釋放,BIO 是沒有釋放的,所以在 keep-alive=true 的情況下處理的并發連接數有限

Read Request Headers:由于 request header 數據較少,可以由容器提前解析完畢,不需要阻塞

Read Request Body:讀取 request body 的數據是應用業務邏輯的事情,同時 Servlet 的限制,是需要阻塞讀取的

Write Response:跟讀取 request body 的邏輯類似,同樣需要阻塞寫

NIO處理相關類

Acceptor 線程負責接收連接,調用 accept 方法阻塞接收建立的連接,并對 socket 進行封裝成 PollerEvent,指定注冊的事件為 op_read,并放入到 EventQueue 隊列中,PollerEvent 的 run 方法邏輯的是將 Selector 注冊到 socket 的指定事件。

Poller 線程從 EventQueue 獲取 PollerEvent,并執行 PollerEvent 的 run 方法,調用 Selector 的 select 方法,如果有可讀的 Socket 則創建 Http11NioProcessor,放入到線程池中執行。

CoyoteAdapter 是 Connector 到 Container 的適配器,Http11NioProcessor 調用其提供的 service 方法,內部創建 Request 和 Response 對象,并調用最頂層容器的 Pipeline 中的第一個 Valve 的 invoke 方法。

Mapper 主要處理 http url 到 servlet 的映射規則的解析,對外提供 map 方法。

NIO Connector主要參數

Comet

Comet 是一種用于 Web 的推送技術,能使服務器實時地將更新的信息傳送到客戶端,而無須客戶端發出請求,在 WebSocket 出來之前,如果不使用 comet,只能通過瀏覽器端輪詢 Server 來模擬實現服務器端推送。Comet 支持 servlet 異步處理 IO,當連接上數據可讀時觸發事件,并異步寫數據(阻塞)。

Tomcat 要實現 Comet,只需繼承 HttpServlet 同時,實現 CometProcessor 接口。

Begin:新的請求連接接入調用,可進行與 Request 和 Response 相關的對象初始化操作,并保存 response 對象,用于后續寫入數據

Read:請求連接有數據可讀時調用

End:當數據可用時,如果讀取到文件結束或者 response 被關閉時則被調用

Error:在連接上發生異常時調用,數據讀取異常、連接斷開、處理異常、socket 超時

Note:

Read:在 post 請求有數據,但在begin事件中沒有處理,則會調用read,如果read沒有讀取數據,在會觸發Error回調,關閉socket

End:當socket超時,并且response被關閉時也會調用;server被關閉時調用

Error:除了socket超時不會關閉socket,其他都會關閉socket

End和Error時間觸發時應關閉當前comet會話,即調用CometEvent的close方法 Note:在事件觸發時要做好線程安全的操作

異步 Servlet

傳統流程:

首先,Servlet 接收到請求之后,request 數據解析;

接著,調用業務接口的某些方法,以完成業務處理;

最后,根據處理的結果提交響應,Servlet 線程結束。

異步處理流程:

客戶端發送一個請求

Servlet 容器分配一個線程來處理容器中的一個 Servlet

Servlet 調用 request.startAsync(),保存 AsyncContext,然后返回

任何方式存在的容器線程都將退出,但是 response 仍然保持開放

業務線程使用保存的 AsyncContext 來完成響應(線程池)

客戶端收到響應

Servlet 線程將請求轉交給一個異步線程來執行業務處理,線程本身返回至容器,此時 Servlet 還沒有生成響應數據,異步線程處理完業務以后,可以直接生成響應數據(異步線程擁有 ServletRequest 和 ServletResponse 對象的引用)

為什么 Web 應用中支持異步?

推出異步,主要是針對那些比較耗時的請求:比如一次緩慢的數據庫查詢,一次外部 REST API 調用,或者是其他一些 I/O 密集型操作。這種耗時的請求會很快的耗光 Servlet 容器的線程池,繼而影響可擴展性。

Note:從客戶端的角度來看,request 仍然像任何其他的 HTTP 的 request-response 交互一樣,只是耗費了更長的時間而已。

異步事件監聽

onStartAsync:Request 調用 startAsync 方法時觸發

onComplete:syncContext 調用 complete 方法時觸發

onError:處理請求的過程出現異常時觸發

onTimeout:socket 超時觸發

Note:onError/onTimeout 觸發后,會緊接著回調 onComplete,onComplete 執行后,就不可再操作 request 和 response。

原文鏈接:https://juejin.cn/post/6844903473482317837

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9295

    瀏覽量

    85998
  • 開源
    +關注

    關注

    3

    文章

    3398

    瀏覽量

    42686
  • tomcat
    +關注

    關注

    0

    文章

    30

    瀏覽量

    4870

原文標題:萬字詳解 Tomcat 組成與工作原理

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    ftp服務器怎么搭建

    需要選擇一款合適的FTP服務器軟件。常見的FTP服務器軟件包括Windows自帶的IIS(Internet信息服務)、第三方軟件如Serv-U、3CDaemon、FileZilla Server以及
    的頭像 發表于 02-01 15:43 ?44次閱讀

    Flexus 云服務器 X 實例實踐:安裝 Dashdot 開源服務器儀表板

    的性能脫穎而出。而 Dashdot 作為一款特色的開源服務器儀表盤,當我們嘗試將其安裝在華為云 Flexus 云服務器 X 實例上時,又會開啟怎樣的創新體驗呢? 一、Flexus 云服務器
    的頭像 發表于 01-13 15:51 ?256次閱讀
    Flexus 云<b class='flag-5'>服務器</b> X 實例實踐:安裝 Dashdot <b class='flag-5'>開源</b><b class='flag-5'>服務器</b>儀表板

    Flexus?X 實例與華為云 EulerOS 的 Tomcat 安裝指南

    前言 Tomcat 是一個由 Apache 軟件基金會開發并維護的免費、開源的 Web 應用服務器。它主要用于處理 Java Servlet、JavaServer Pages(JSP
    的頭像 發表于 12-24 17:34 ?195次閱讀
    Flexus?X 實例與華為云 EulerOS 的 <b class='flag-5'>Tomcat</b> 安裝指南

    Tomcat開放源代碼的Web應用服務器

    Tomcat 簡介 Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,屬于輕量級應用服務器,在中小型系統和并發訪問用戶不是很多
    的頭像 發表于 12-23 11:24 ?276次閱讀
    <b class='flag-5'>Tomcat</b>開放源代碼的Web應用<b class='flag-5'>服務器</b>

    如何測試SMTP服務器功能

    滿意度。 測試前的準備 了解SMTP協議 :熟悉SMTP協議的基本工作原理,包括郵件發送和接收的過程,以及常見的SMTP命令和響應。 獲取必要的工具 :準備一些工具來幫助測試SMTP服務器,如Telnet、SMTP測試工具(如MXToolbox、Blackbird或Mai
    的頭像 發表于 10-30 17:31 ?943次閱讀

    SMTP服務器配置教程

    服務器。 端口 :SMTP通常使用25、465(SSL)和587(TLS)端口。 認證 :為了安全起見,SMTP服務器可能需要用戶名和密碼進行認證。 2. 選擇SMTP服務器軟件 有許多開源
    的頭像 發表于 10-30 16:16 ?1337次閱讀

    獨立服務器與云服務器的區別

    隨著互聯網技術的飛速發展,企業對于服務器的需求日益增加,而服務器市場也隨之出現了多種類型的產品,其中最常見的是獨立服務器和云服務器。這兩種服務器
    的頭像 發表于 10-12 14:34 ?333次閱讀

    常見的服務器容器和漏洞類型匯總

    常見的服務器容器包括KubeSphere、Tomcat、Nginx、Apache等,它們在提供便捷的服務部署和靈活的網絡功能的同時,也可能存在著一定的安全風險。這些容器的漏洞可能導致數據泄露、權限被非授權訪問甚至系統被完全控制。
    的頭像 發表于 08-29 10:39 ?280次閱讀

    串口服務器的定義和功能

    串口服務器,作為一種重要的網絡設備,在現代通信和數據傳輸中扮演著至關重要的角色。以下是對串口服務器的詳細解析,包括其定義、功能、工作原理、應用領域以及未來發展等方面。
    的頭像 發表于 08-25 17:21 ?2240次閱讀

    tcp方式連接不了服務器了,服務器代碼還能開源嗎?

    是在維護服務器嗎?已經兩天了。http方式還可以連接上,就tcp的方式不行了.服務器代碼能開源嗎?讓我們自己搭建服務器用。
    發表于 07-15 06:53

    服務器和虛擬服務器的區別是什么

    服務器和虛擬服務器是兩種常見的服務器類型,它們在很多方面有相似之處,但也有一些關鍵的區別。本文將詳細介紹云服務器和虛擬服務器的區別,包括它
    的頭像 發表于 07-02 09:48 ?912次閱讀

    京準電子、NTP網絡授時服務器工作原理及應用領域分析

    京準電子、NTP網絡授時服務器工作原理及應用領域分析
    的頭像 發表于 05-21 15:30 ?469次閱讀
    京準電子、NTP網絡授時<b class='flag-5'>服務器</b><b class='flag-5'>工作原理</b>及應用領域分析

    高防美國云服務器工作原理是什么?

    高防美國云服務器工作原理主要基于強化的網絡防護措施和先進的安全技術。那么高防美國云服務器工作原理是什么?Rak部落小編為您整理發布高防美國云服務
    的頭像 發表于 05-17 10:13 ?345次閱讀

    超云信創服務器與openEuler開源操作系統完成互認證

    日前,超云 C86 平臺服務器 R3215、R3216 成功完成了與 openEuler 開源操作系統的兼容性適配工作。測試結果表明:openEuler 22.03 LTS SP3 版本的開源
    的頭像 發表于 03-12 16:08 ?1379次閱讀
    超云信創<b class='flag-5'>服務器</b>與openEuler<b class='flag-5'>開源</b>操作系統完成互認證

    linux服務器和windows服務器

    和適用性。 首先,Linux服務器是一種基于開源的操作系統,其內核是由許多個人和組織共同開發和維護的。它具有高度的穩定性和安全 性。由于Linux操作系統的開放性,用戶可以根據自己的需求和喜好進行自定義配置
    發表于 02-22 15:46
    主站蜘蛛池模板: 区产品乱码芒果精品P站在线 | 精品久久电影网 | 姑娘日本大全免费观看版中文翻译 | 亚洲女初尝黑人巨磁链接 | 日日噜噜夜夜狠狠扒开双腿 | 在线播放日韩欧美亚洲日本 | 精品伊人久久 | 国产 亚洲 中文在线 字幕 | 浪货嗯啊趴下NP粗口黄暴 | 多肉np一女多男高h爽文现代 | 国产婷婷午夜精品无码A片 国产婷婷色综合AV蜜臀AV | 在线播放日韩欧美亚洲日本 | 99热免费精品店 | 3D动漫网站HOXXXxes | h版动漫在线播放的网站 | 果冻传媒在线观看视频 | 噼里啪啦免费观看视频大全 | a一级一片免费观看视频 | 国产啪精品视频网免费 | 国产视频精品免费 | 光溜溜的美女直播软件 | 日日做夜夜欢狠狠免费软件 | 毛片在线不卡 | 俄罗斯bbbb| 久久视频在线视频观看精品15 | 国产在线中文字幕 | 护士美女照片 | 羞羞影院午夜男女爽爽影院网站 | 王雨纯羞羞 | 97草碰在线视频免费 | 青青草原影视 | 秋霞电影在线观看午夜伦 | 国产AV精品一区二区三区漫画 | 受坐在攻腿上H道具PLAY | 午夜精品久久久久久久爽牛战 | 我的美女奴隶 | 哇嘎在线精品视频在线观看 | 一区二区三区国产 | 久久国产免费观看精品1 | 东京热 百度影音 | 欧美中文字幕一区二区三区 |