我打算使用netty客戶端引導程序打開多個連接,以解析來自多個源的消息。這些消息都具有相同的格式,但是,由於需要處理的數據量很大,我必須在不同的線程上運行每個連接(這是假設netty爲每個客戶端通道創建一個線程,我找不到參考因爲 - 如果情況並非如此,這將如何實現?)。Scala Netty有沒有什麼辦法可以共享一個ReplayingDecoder
這是我用來連接到數據服務器的代碼:其延伸ReplayingDecoder
var b = new Bootstrap()
.group(group)
.channel(classOf[NioSocketChannel])
.handler(RawFeedChannelInitializer)
var ch1 = b.clone().connect(host, port).sync().channel();
var ch2 = b.clone().connect(host, port).sync().channel();
初始化器調用RawPacketDecoder
,並且被定義here。 當打開單個連接時,代碼運行良好,沒有@Sharable
,但爲了我的應用程序的目的,我必須多次連接到同一個服務器。
這會導致運行時錯誤@Sharable annotation is not allowed
指向我的RawPacketDecoder
類。
我不完全確定如何解決這個問題,但缺少在scala中實現類ReplayingDecoder
作爲我的解碼器直接基於ByteToMessageDecoder
。
任何幫助將不勝感激。
注:我使用的網狀4.0.32最終
Netty不會爲每個通道創建一個線程,它通過其自己的線程共享所有傳入通道,並且如果存在比線程更多的通道,則1個線程可以具有多個通道 – Ferrybig