我打算使用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