UDP中具有组合多播的模型,即向多个接收者发送消息的额外传输模式
多播– 传输到一个预定义的主机组
广播– 传播给网络上所有的主机上
我们利用发送到255.255.255.255这个特殊IP,将发送的消息定向给本地网络上所有主机
我们按照 发布/订阅的设计模式来进行相关的设计
一个生产者或者服务进行事件的发布,多个客户端进行订阅消费
我们首先定义一个数据的POJO,定义了消息的内容,我们将消息作为事件进行处理,由于这个数据来自日志,故起名为LogEvent
我们实现这个应用程序的广播逻辑了
然后是利用Netty自带的类去编写相对应的逻辑处理消息
Netty容器是我们去实现远程节点通信的容器,包含了接受者和发送者和消息本身的容器
我们需要将LogEvent转换为DatagramPacket
我们将会利用一个自定义的MessageToMessageEncoder去编写
我们整体的数据流程图如下
我们将消息封装在对象中,将这些消息写入Channel,然后利用转为DategramPacket进行编码
我们自定义的MessageToMessageEncoder代码如下
然后我们准备好引导器,代码如下
我们就进行了相关的广播的组件测试,我们利用UNIX自带的netcat进行相关的测试工作
监听某个特定的端口,并将接受到的数据打印到标准输出,然后设置监听UDP端口9999上的数据
测试能否接受数据
不过,我们也准备了更加完整的事件消费者,称为LogEventMonitor
接受LogEventBroadcaster广播的UDP DatagramPacket
然后解码为LogEvent
然后读取LogEvent的消息
整体的读取流程如上
首先是一个解码器,将传入的DatagramPacket解码为LogEvent消息
然后对第一个ChannelHandler创建的LogEvent消息进行一部分的处理,
我们打印了LogEvent的消息
然后一个引导的主类