gpt4 book ai didi

java - Netty 将并发请求放入队列

转载 作者:行者123 更新时间:2023-12-02 03:57:28 30 4
gpt4 key购买 nike

我有一个 netty 问题,我有一个带有 FutureChannel 和处理程序的服务器

     ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new MyDecoder(service),new MyHander(),);

}

})

我想让这个服务器成为单线程并将并发请求放入队列,我知道使用适当的调度程序应该可以做到这一点,但我对此很陌生,不知道如何实现这一点。感谢您的回答。

最佳答案

制作单线程处理程序很简单。

为此,您需要定义另一个 EventLoopGroup 变量,该变量将是我们的单线程执行器组,因此我们将线程计数设置为 1:

EventLoopGroup applicationGroup = new NioEventLoopGroup(1);

然后我们可以在 ChannelInitializer 中使用该组来在其上安排任务,我们使用 addLast(EventExecutorGroup, ChannelHandler...)为此目的:

ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new MyDecoder(service))
ch.pipeline().addLast(applicationGroup, new MyHander());

}

})

使用单独的applicationGroup构建管道后,每个请求都将以单线程方式进入其中,并且可以使用简单的调试语句来确认该行为。这种构造方法的优点是,您可以简单地在处理程序中假设一个线程,同时仍然以多线程和高性能进行协议(protocol)解码。

当您关闭服务器时,您应该确保正确终止 applicationGroup,就像您对 workerGroupbossgroup 所做的那样

关于java - Netty 将并发请求放入队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35295794/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com