摘要:實現為,即模式上一個依賴于下一個的調用,比如常見的就是這種模式。啟動實例化和設置運行時處理流程通常會實例化一個,注意的構造方法最終會調用依次將構成責任鏈因為這個連同都是類型。內部所有等執行即。
Connectors
For each accepted TCP connection, the Connector asks a ConnectionFactory to create a Connection object that handles the network traffic on that TCP connection, parsing and generating bytes for a specific protocol.
比如:a ServerConnector configured with three factories: ProxyConnectionFactory, SslConnectionFactory and HttpConnectionFactory. Such connector will be able to handle PROXY protocol bytes coming from a load balancer such as HAProxy (with the ProxyConnectionFactory), then handle TLS bytes (with SslConnectionFactory) and therefore decrypting/encrypting the bytes from/to a remote client, and finally handling HTTP/1.1 bytes (with HttpConnectionFactory).
可以自己自定義ConnectionFactory實現來處理自定義的協議。
Handlers// org.eclipse.jetty.server.Handler的方法: public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException;
Handlers有兩種模型:
Sequential handlers,即handlers依賴定義的順序,而上一個handler不依賴于下一個handler的調用。實現為org.eclipse.jetty.server.handler.HandlerCollection
Nested handlers,即 before/invokeNext/after 模式(上一個handler依賴于下一個handler的調用),比如常見的FilterChain就是這種模式。實現為org.eclipse.jetty.server.handler.HandlerWrapper
ServletHandler、ServletContextHandler最基層的handler,常見的就是spring的DispacherServlet + 一些Filter。ServletHandler會被 ServletContextHandler 所持有。ServletContextHandler與ServletHandler是一對一的,邏輯上就是 web application context ,即SessionHandler、SecurityHandler、ServletHandler、GzipHandler的組合,常見的就是web.xml。
Server啟動new Server(int port) -> 實例化QueuedThreadPool和ServerConnector
Server#setHandler 設置運行時處理流程:
通常會實例化一個ServletContextHandler,注意ServletContextHandler的構造方法最終會調用ServletContextHandler#relinkHandlers
依次將SessionHandler、SecurityHandler、GzipHandler、ServletHandler構成責任鏈(因為這4個handler連同ServletContextHandler都是HandlerWrapper
類型)。
Server#start即AbstractLifeCycle#start -> Server#doStart。以下步驟是Server#doStart
設置ErrorHandler
ShutdownThread通過Runtime.getRuntime().addShutdownHook(Thread)使得jvm關閉時會喚起ShutdownThread來stop Server
啟動ShutdownMonitor來監聽遠端stop指令,可以設置STOP.HOST、STOP.PORT、STOP.KEY來啟用。
內部所有connector(ServerConnector等)執行Connector#start 即AbstractLifeCycle#start。
AbstractNetworkConnector#doStart -> ServerConnector#open -> ServerConnector#openAcceptChannel 即綁定host、port到ServerSocket
Server運行時由于Server繼承HandlerWrapper,運行時由其內部托管的handler實現(比如ServletContextHandler)。
HttpChannel#handle -> Server#handle(target, request, request, response)即HandlerWrapper的handle方法
注意:Server、ServletContextHandler、SessionHandler、SecurityHandler、GzipHandler、ServletHandler都是HandlerWrapper,即都在一條責任鏈上。
注意:ServletContextHandler、SessionHandler、ServletHandler繼承ScopedHandler,即調用鏈上是 ScopedHandler#handle(target, request, request, response) -> ScopedHandler#doScope入參略 -> ScopedHandler#doHandle
所以最后請求request會傳遞到ServletHandler,通常會設置spring的DispatcherServlet作為ServletHandler的Servlet。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/70992.html
摘要:這里我想從我在谷歌內部使用容器,并基于容器研發大規模生產平臺的經驗中談談現有和谷歌容器環境的差別,并通過的實際案例落地經驗總結下自身所帶來的一些謊言和誤區。 我與容器的緣分起源于我在 Google 內部研發容器集群管理系: Cluster Management。谷歌內部一切皆容器,搜索、視頻、大數據、內部工具等核心業務都以容器的方式運行在容器編排系統 Borg 上。2014年,隨著公司...
摘要:作為微服務的基礎設施之一,背靠強大的生態社區,支撐技術體系。微服務實踐為系列講座,專題直播節,時長高達小時,包括目前最流行技術,深入源碼分析,授人以漁的方式,幫助初學者深入淺出地掌握,為高階從業人員拋磚引玉。 簡介 目前業界最流行的微服務架構正在或者已被各種規模的互聯網公司廣泛接受和認可,業已成為互聯網開發人員必備技術。無論是互聯網、云計算還是大數據,Java平臺已成為全棧的生態體系,...
閱讀 2919·2023-04-25 19:08
閱讀 1416·2021-11-16 11:45
閱讀 1964·2021-10-13 09:40
閱讀 4128·2021-09-30 09:47
閱讀 2415·2019-08-30 15:44
閱讀 2261·2019-08-30 13:03
閱讀 1387·2019-08-30 12:56
閱讀 1890·2019-08-26 14:04