gpt4 book ai didi

Netty 4 - 改变 channel 的事件循环

转载 作者:行者123 更新时间:2023-12-01 06:37:06 24 4
gpt4 key购买 nike

我的问题是关于更改已注册 channel 的 channel 事件循环。

channel 绑定(bind)到 io-eventloop 线程,来自 serverboostrap 上设置的 EventLoopGroup。行。
但是在“协议(protocol)协商”之后,我想将某个 channel 的 io-eventloop 更改为专用的 io-eventloop。
所以我做这样的事情:

        channel.deregister().addListener(new ChannelFutureListener() {

@Override
public void operationComplete(ChannelFuture future) throws Exception {

newIoLoop.register(future.channel()).sync();
}
});

一切都很好,但有一个问题:
channel.eventloop 被更新,更新的 ChannelHandlerContext 将使用这个事件循环创建。
但是 channel.pipeline.head 仍然绑定(bind)到旧的事件循环。
这是预期的行为吗?

这会生成 AbstractNioByteChannel.NioByteUnsafe.read() 方法引发的异常:
  case 2:
// Let the inbound handler drain the buffer and continue reading.
if (read) {
read = false;
pipeline.fireInboundBufferUpdated(); // event fired in the pipeline to try to read some bytes but without waiting for handler executed in another loop
if (!byteBuf.writable()) { // byteBuf may always be full and exception is raised
throw new IllegalStateException(
"an inbound handler whose buffer is full must consume at " +
"least one byte.");
}
}

就我而言,更改 channel 注册时更改 pipeline.head.eventloop 将解决此问题。

最佳答案

这是一个错误..你能在我们的问题跟踪器上打开一个错误报告吗?

谢谢!

关于Netty 4 - 改变 channel 的事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13838149/

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