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的消息

然后一个引导的主类

图片

图片

发表评论

邮箱地址不会被公开。 必填项已用*标注