我们需要使用 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 实现了 Serializable 和 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 复制此场景。请向我们提供示例代码。