netty 4.x.x 中的 UDP 广播

2024-04-21

我们需要使用 Netty 4.0.0 二进制文件通过 UDP 通道广播对象(Pojo)。
在 Netty 4.0.0 中,它允许我们仅使用 DatagramPacket 类来发送 UDP 数据包。
此类仅接受 ByteBuf 作为参数。

还有其他方法可以通过 UDP 通道发送 Pojo 吗?

为了进一步澄清,我们做了如下操作:

初始化 UDP 通道设置

ConnectionlessBootstrap udpBootstrap;
udpBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() throws Exception {
                return Channels.pipeline(
                        new ObjectEncoder(),
                        new ObjectDecoder(new NettyElementInfo()),
                        new UDPBroadcastHandler());
            }
        });
        udpBootstrap.setOption("broadcast", true);
        //datagramChannel = (DatagramChannel) udpBootstrap.bind(new InetSocketAddress(udp_port));
        datagramChannel = (DatagramChannel) udpBootstrap.bind(new InetSocketAddress(0));

这里,NettyElementInfo 实现了 Serialized 和 ClassResolver 接口。我们尝试按如下方式广播这个 pojo:

channel.write(new NettyElementInfo(), 
                new InetSocketAddress("255.255.255.255", 9555));

在接收端,我们对初始化部分执行与上面相同的操作。但是,在处理程序中获取 Pojo 如下:

NettyElementInfo elementInfo = (NettyElementInfo)e.getMessage();

这是使用 netty 3.5.x 成功完成的

如何使用 Netty 4.0.0 复制此场景。请向我们提供示例代码。


我认为你可以有一个 MessageToMessageDecoder/MessageToMessageEncoder 来将 DatagramPacket 编码/解码为 ByteBuf,它实际上只不过是调用 DatagramPacket.content() 进行解码(仅作为示例)。在编码器/解码器之后,您可以添加通常的其他 ChannelHandler 来处理 ByteBuf 到 Pojo 的解码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

netty 4.x.x 中的 UDP 广播 的相关文章

随机推荐