Netty实战(十五)

news2024/11/26 9:54:54

UDP广播事件(一)UDP简介和示例程序

  • 一、UDP基础
    • 1.2 UDP介绍
        • 1.2.1 UDP和TCP的区别
    • 1.3 UDP广播
      • 1.3.1 单播模式
      • 1.3.2 UDP的传输模式
  • 二、UDP示例程序
  • 三、消息 POJO: LogEvent

一、UDP基础

到目前为止,我们已经见过的绝大多数的例子都使用了基于连接的协议,如TCP。下面我们将会把重点放在一个无连接协议即用户数据报协议(UDP)上,它通常用在性能至关重要并且能够容忍一定的数据包丢失的情况下使用。

1.2 UDP介绍

1.2.1 UDP和TCP的区别

TCP:是面向连接的传输,它管理了两个网络端点之间的连接的建立,在连接的生命周期内的有序和可靠的消息传输,以及最后,连接的有序终止。TCP 的消息是有序的,并且会在两个方向上流动。

UDP: 是无连接协议中,并没有持久化连接这样的概念,并且每个消息(一个 UDP 数据报)都是一个单独的传输单元。同时UDP 也没有 TCP 的纠错机制,其中每个节点都将确认它们所接收到的包,而没有被确认的包将会被发送方重新传输。 UDP 消息是无序的,并且无法确定是否能到达目的地。

UDP的优势和不足:

优势:UDP的传输速度远远高于TCP

不足:消除了所有的握手以及消息管理机制的开销,消息可能会丢失。

1.3 UDP广播

1.3.1 单播模式

单播模式定义为:发送消息给一个由唯一的地址所标识的单一的网络目的地。面向连接的协议和无连接协议都支持这种模式。

1.3.2 UDP的传输模式

UDP 提供了向多个接收者发送消息的额外传输模式:

  • 多播——传输到一个预定义的主机组;
  • 广播——传输到网络(或者子网)上的所有主机。

二、UDP示例程序

我们下面设计这样的一个程序来演示UDP 广播的使用:
1、发送能够被同一个网络中的所有主机所接收的消息。
2 、使用特殊的受限广播地址或者零网络地址 255.255.255.255。
3、将发送到这个地址的消息都将会被定向给本地网络(0.0.0.0)上的所有主机,而不会被路由器转发给其他的网络。
4、接收方通过 UDP 广播,在指定的端口上启动一个监听程序,并创建一个事件监视器来接收日志消息。

应用由一个广播者以及一个或者多个事件监视器所组成。广播者将监听新内容的出现,当它出现时,则通过 UDP 将它作为一个广播消息进行传输。所有的在该 UDP 端口上监听的事件监视器都将会接收到广播消息。因为是一个示例,所以我们将不会为它添加身份认证、验证或者加密。但是,要加入这些功能并使得其成为一个健壮的、可用的实用程序应该也不难。
在这里插入图片描述

发布/订阅模式 : 类似于 syslog 这样的应用程序通常会被归类为发布/订阅模式:一个生产者或者服务发布事件,而多个客户端进行订阅以接收它们。

三、消息 POJO: LogEvent

在消息处理应用程序中,数据通常由 POJO表示,除了实际上的消息内容,其还可以包含配置或处理信息。在这个应用程序中,我们把消息作为事件处理,并且由于该数据来自于日志文件,所以将它称为LogEvent。

下面我们写一个这样的消息组件:


import java.net.InetSocketAddress;

/**
 * Author: lhd
 * Data: 2023/6/13
 * Annotate:LogEvent 消息
 */
public final class LogEvent {
    public static final byte SEPARATOR = (byte) ':';
    private final InetSocketAddress source;
    private final String logfile;
    private final String msg;
    private final long received;

   // 用于传出消息的构造函数
    public LogEvent(String logfile, String msg) {
        this(null, -1, logfile, msg);
    }

    //用于传入消息的构造函数
    public LogEvent(InetSocketAddress source, long received,
                    String logfile, String msg) {
        this.source = source;
        this.logfile = logfile;
        this.msg = msg;
        this.received = received;
    }

    //返回发送 LogEvent 的源的 InetSocketAddress
    public InetSocketAddress getSource() {
        return source;
    }

    //返回所发送的 LogEvent的日志文件的名称
    public String getLogfile() {
        return logfile;
    }

    //返回消息内容
    public String getMsg() {
        return msg;
    }
    
    //返回接收 LogEvent的时间
    public long getReceivedTimestamp() {
        return received;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/643697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android系统中最重要的一个组件【Framework】

Android Framework是Android系统中最重要的一个组件,它为Android应用开发者提供了一套完整而稳定的API框架,可以方便地实现各种应用功能。Android市场对Framework的需求量非常大,尤其在当前移动互联网时代,Android应用的市场需求也…

SpringCloud Alibaba-Nacos

SpringCloud Alibaba-Nacos 1. Nacos安装1.1 Nacos概要1.2 Nacos架构1.3 Nacos安装1.3.1 单机模式 Derby安装1.3.2 单机模式 MySQL安装1.3.3 Docker 安装Nacos 2 Nacos功能应用2.1 Nacos服务注册与发现2.2 负载均衡2.3 配置中心2.3.1 配置管理2.3.2 多环境切换2.3.3 共享/扩展 …

Spark集群部署和启动与关闭

上一篇我们讲了Hadoop集群部署和启动与关闭,今天我们讲一下Spark集群部署和启动与关闭。首先我们先来了解一下Spark集群部署模式,分别有以下三种: Standalone   Standalone(独立模式)是Spark一种简单的集群部署模式&…

随着用户体验质量的不断追求,性能优化成了Android开发中的重要一方面

在移动互联网时代,Android系统的使用越来越广泛,而随着用户对体验质量的不断追求,性能优化已经成为了Android应用开发中的重要方面。以下是对Android市场对性能优化的需求量及应用广度进行详细分析的几个方面。 1. 用户需求 随着Android系统…

DataLeap的全链路智能监控报警实践(三): 系统实现

系统实现 整体架构 基线 管理模块:负责基线创建、更新、删除等操作,管理基线元信息,包括保障任务,承诺时间,余量及报警配置等); 基线 实例生成:系统每天定时触发生成基线实例&#x…

2023 年最新互联网 Java 面试八股文出炉(附大厂 P5-P8 技术栈)

为什么感觉 Java 面试变难了? 几年前,你只需要简单的 ssm 框架,就能轻松找到一份 Java 的工作,但现在不一样了,随着涌入这个行业的人越来越多,同一个岗位需要筛选掉更多人,要求自然水涨船高&am…

ubuntu 20.04 aarch64 平台交叉编译 opencv 静态库

编译环境 win10 64 位 VMware Workstation Pro 16 虚拟机 虚拟机安装 ubuntu 20.04 opencv 版本: 来自 github 当前最新 4.7 目的 交叉编译 opencv 生成静态库(.a),用于 嵌入式 aarch64 平台。 环境配置方法 参考上一篇 u…

基于Java汽车配件销售业绩管理系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

@vue/cli脚手架

2. vue/cli脚手架 2.1vue/cli 脚手架介绍 目标: webpack自己配置环境很麻烦, 下载vue/cli包,用vue命令创建脚手架项目 vue/cli是Vue官方提供的一个全局模块包(得到vue命令), 此包用于创建脚手架项目脚手架是为了保证各施工过程顺利进行而搭设的工作平台 2.2 vue/cli 目录和代…

Camera | 11.瑞芯微摄像头采集图像颜色偏绿解决笔记

前言 在实际调试基于瑞芯微平台的camera过程中,发现显示的图片发绿, 现在把调试步骤分享给大家: 1、修改iq文件 sdk中位置: external/camera_engine_rkaiq/iqfiles/isp21/ov13850_ZC-OV13850R2A-V1_Largan-50064B31.xml【现在…

EBU5476 Microprocessor System Design 知识点总结_1 Introduction

主要学习自北邮国院物联网工程大三下学期微处理器课程。 Introduction-随便聊 嵌入式系统是什么?专用的计算机系统。为专门功能可能对计算机架构,外设等做出一些取舍。 通常的限制:Cost(比如大量部署传感器节点)&am…

基础知识学习---牛客网C++面试宝典(二)C/C++基础之C++内存

1、本栏用来记录社招找工作过程中的内容,包括基础知识学习以及面试问题的记录等,以便于后续个人回顾学习; 暂时只有2023年3月份,第一次社招找工作的过程; 2、个人经历: 研究生期间课题是SLAM在无人机上的应…

深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

分类目录:《深入理解深度学习》总目录 相关文章: 注意力机制(AttentionMechanism):基础知识 注意力机制(AttentionMechanism):注意力汇聚与Nadaraya-Watson核回归 注意力机制&#…

想了解会计软件吗?来看看Zoho Books的功能和特点

Zoho Books 是一款功能强大的在线会计软件,为企业提供多合一解决方案,该解决方案可定制、可扩展,并使始终保持合规。 轻松生成电子发票 在Zoho Books中,您可以通过包含电子发票架构中提到的所有必填字段来创建电子发票格式的发票。…

css 包含块

你不知道的 CSS 之包含块 一说到 CSS 盒模型,这是很多小伙伴耳熟能详的知识,甚至有的小伙伴还能说出 border-box 和 content-box 这两种盒模型的区别。 但是一说到 CSS 包含块,有的小伙伴就懵圈了,什么是包含块?好像…

【啃】《Java核心卷 一》 | 第一,二章

文章目录 《Java核心技术卷 一》第一章 概述第二章 Java编程环境 图书推荐 《Java核心技术卷 一》 第一章 概述 前言:本书与一些”0基础入门“的书定位感觉是不太一样的,可能就像书名所说,是”核心技术“叭。书中经常将Java语言与 c 进行对比…

无损网络理论和实践

一、为什么需要无损网络? 随着高性能计算、大数据分析、人工智能以及物联网等技术的飞速发展,集中式存储、分布式存储以及云数据库的普及等原因,业务应用有越来越多的数据需要从网络中获取,这对数据中心网络的交换速度和性能要求…

Linux :: 权限篇:【1】:Linux 下文件访问者身份说明:三人一组!【补充:Linux下用户类型的分类!】

系列文章说明 前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集推荐: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习…

【Flutter】Flutter 如何调用另一个 Page 里的函数

文章目录 一、前言二、状态管理和页面函数调用1. 状态管理简介2. 页面函数调用的需求 三、方法介绍和示例1. Provider 方法2. Global Key 方法3. 回调函数方法 四、总结 一、前言 本文的目标是为 Flutter 初学者解释如何在 Flutter 中调用另一个 Page 里的函数。通过阅读本文&…

碳排放预测模型 | Python实现基于机器学习回归分析的碳排放预测模型——数据清理和准备

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 碳排放预测模型 | Python实现基于机器回归分析的碳排放预测模型——数据清理和准备 研究内容 分析国家在设计用于预测和预测二氧化碳排放的机器学习模型方面的特定记录,利用来自全球绝大多数国家的记录。…