標籤:str ++ dev div ice function dcl title 監聽
實現功能
啟動netty,按照使用者配置的Listener進行連接埠的監聽,接受用戶端發來的連結
實現步驟
1、啟動netty
2、通過ListenerConfigurationService獲得到使用者的Listener配置,將對應的配置綁定到netty上。
類圖
這個uml熟悉netty的朋友應該看起來很清晰,下來我們帖幾段代碼,來看hivemq是如何綁定的。
public ListenableFuture<List<ListenerStartResult>> startListeners() {//為netty註冊Shutdown,為了使netty主線程在關閉時,能夠關閉掉worker和boss this.shutdownRegistry.register(new NettyShutdown(this.childEventLoop, this.parentEventLoop, this.hiveMQConfigurationService.internalConfiguration().getInt(Internals.EVENT_LOOP_GROUP_SHUTDOWN_TIMEOUT))); //記錄Listener啟動的結果的Future列表,方便在日誌/控制台中列印出Listener綁定的結果。 List<ListenerStartFuture> startFutures = new ArrayList<>(); //如果使用者未配置Listener,那麼將預設添加一個綁定到1883連接埠TcpListener addDefaultListenerWhenListenersIsEmpty();//從使用者配置中獲得到TcpListeners綁定到netty上 startFutures.addAll(startTcpListeners(this.listenerConfigurationService.getTcpListeners()));//從使用者配置中獲得到TlsTcpListeners綁定到netty上 startFutures.addAll(startTlsTcpListeners(this.listenerConfigurationService.getTlsTcpListeners()));//從使用者配置中獲得到WebsocketListeners綁定到netty上startFutures.addAll(startWebsocketListeners(this.listenerConfigurationService.getWebsocketListeners()));//從使用者配置中獲得到TlsWebsocketListeners綁定到netty上startFutures.addAll(startTlsWebsocketListeners(this.listenerConfigurationService.getTlsWebsocketListeners()));//將一堆啟動的Future轉換成一個Future,讓調用者(HiveMQServer)方便使用。 return getStartResult(startFutures); }
由上面的過程可以知道,具體代碼處理流程
1、由HiveMQServer,調用NettyServer的start,啟動netty。
2、然後再調用startListeners,將配置的Listeners綁定到netty上
MQTT交流群:221405150
MQTT---HiveMQ源碼詳解(五)Netty-啟動與Listeners載入