LeshanServer啓動過程

啓動過程時序圖:
在這裏插入圖片描述
啓動可配命令行參數:
-h help 幫助信息
-lh coaphost 本地coap地址,默認任何本地地址
-lp coapport 本地coap端口,默認5683
-slh coapshost 安全的本地coap地址,默認任何本地地址
-slp coapsport 安全的本地CoAP端口,默認5684
-wh webhost web服務的HTTP地址
-wp webport web服務的HTTP端口,默認8080
-m modelsfolder 包含用OMA格式定義的對象models的xml文件的文件夾
-r redis redis集羣,格式redis://:password@hostname:port/db_number,
不帶數據庫,密碼格式redis://localhost:6379,默認不配。
-mdns publishDNSSdServices 發佈leshan服務到DNS服務發現
-ks keystore 設置key保存文件,如果設置了ks,使用X.509安全模式,否則使
用內建的RPK認證。
-ksp storepass 設置key store密碼
-kst storetype 設置key store類型,默認jks
-ksa alias 設置server credentials的別名,默認leshan
-ksap keypass 設置key store alias密碼

入口LeshanServerDemo
解析命令行參數,調用createAndStartServer創建LeshanServer

LeshanServerDemo.createAndStartServer過程

public static void createAndStartServer(String webAddress, int webPort, String localAddress, int localPort,
	String secureLocalAddress, int secureLocalPort, String modelsFolderPath, String redisUrl,
	            String keyStorePath, String keyStoreType, String keyStorePass, String keyStoreAlias,
	            String keyStoreAliasPass, Boolean publishDNSSdServices) throws Exception {}

1、實例化LeshanServerBuilder
2、根據啓動參數設置builder的server address,server secure address,設置builder的編解碼器,默認DefaultLwM2mNodeEncoder,DefaultLwM2mNodeDecoder
3、設置CoAP config,如果有配置Californium.properties,就讀取配置文件的配置,如果沒有就讀取NetworkConfigDefaults類默認的配置。
4、連接初始化redis
5、設置server的證書模式
6、通過加載/models文件夾下的model,以及命令行指定的文件夾下的model,轉換成ObjectModel對象描述定義model provider,並設置builder的modelProvider。
7、設置安全及註冊信息的存儲方式,文件InMemoryRegistrationStore或者redis的RedisRegistrationStore
8、builder.build()創建LeshanServer。
9、創建Jetty server,創建servlet接收請求/event/,/api/clients/,/api/security/,/api/objectspecs/
10、如果配置了mdns爲true,就通過JmDNS發佈Leshan HTTP Service,Leshan CoAP Service,Leshan Secure CoAP Service到DNS服務發現。
11、啓動leshan server和Jetty Server。

LeshanServer.build()啓動過程(上面步驟8具體過程):
1、實例化server相關類
2、創建DTLS(數據包傳輸層安全性協議)配置
3、根據dtls配置及noUnsecuredEndpoint配置決定創建secured endpoint或者no secured endpoint
4、實例化一個LeshanServer

LeshanServer實例化過程(上面步驟4具體過程):
1、根據registrationStore初始化RegistrationServiceImpl,管理registration,RegistrationListener,監聽註冊者的regist,unregist,update
2、根據securityStore初始化ObservationServiceImpl,管理Observation和ObservationListener,監聽Observation的change ,add,cancle.
3、添加一個RegistrationListener,當client取消註冊時,取消observations
4、創建endpoint set容器
5、通過CoAPConfig實例化CoapServer
6、添加observationService到endpoint,並將endpoint添加到CoapServer.
7、通過registrationService實例化RegisterResource,通過/rd監聽並處理客戶端的註冊,取消註冊,POST,GET, DELETE請求。
8、添加RegisterResource到CoAPServer
9、創建RequestSender發送請求
10、創建CoapAPI,處理mix LWM2M and CoAP protocol

LeshanServer.start()過程(createAndStartServer步驟11具體過程):
1、通過registrationStore啓動定時線程每隔2s一次清理非活動狀態的regist。
2、start coapServer(遍歷endpoint,並調用endpoint.start())

reference:https://segmentfault.com/a/1190000017496395

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章