gpt4 book ai didi

java - 如何从 Netty 4 中的 ServerBootStrap 获取指向子 channel 的指针

转载 作者:行者123 更新时间:2023-11-29 20:29:15 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何最好地获取指向由我的服务器引导生成的 channel 的指针。这个想法是我以后可能会做类似的事情

childChannel.write(x);

这是我目前拥有的代码。

    EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
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 TimeEncoder(),new DiscardServerHandler());
ch.pipeline().addLast(
new ObjectEncoder(),
new ObjectDecoder(ClassResolvers.cacheDisabled(null)),
new ObjectEchoServerHandler());
}
});

ChannelFuture f = b.bind(port).sync();
//f.channel() returns the NioServerSocketChannel ... not the child
//@TODO need child channel...*********

谢谢!

最佳答案

您可以尝试使用 ChannelGroup (参见 API 文档),例如:

在创建 ServerBootstrap 之前放置

ChannelGroup allChannels = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

您可能决定也将 EventExecutor 更改为 workerGroup。

然后在您的 ObjectEchoServerHandler 中,您的构造函数可以设置此 ChannelGroup

public class ObjectEchoServerHandler extends xxx {
ChannelGroup allChannels;
public ObjectEchoServerHandler(ChannelGroup allChannels) {
this.allChannels = allChannels;
}

@Override
public void channelActive(ChannelHandlerContext ctx) {
// closed on shutdown.
allChannels.add(ctx.channel());
super.channelActive(ctx);
}
}

然后您可以使用群组将消息发送给您想要的人,全部或特定的人。

关于java - 如何从 Netty 4 中的 ServerBootStrap 获取指向子 channel 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32225026/

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