我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Springboot中怎么用Netty开启UDP服务方式

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Springboot中怎么用Netty开启UDP服务方式

这篇文章主要介绍了Springboot中怎么用Netty开启UDP服务方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Netty

Netty是一种提供网络编程的工具,是对socket编程的一例优秀的包装,支持TCP、UDP、FTP等协议。我们可以用Netty开发自己的http服务器、udp服务器、FTP服务器,RPC服务器等

Netty大受欢迎的原因:

  • 并发高

Netty支持NIO编程,NIO的持支,可以大大提升并发性能。

  • 传输快

Netty NIO的一个特性是零拷贝,直接在内存中开辟一块,剩去了socket缓冲区,

  • 封装好

接下来写一个简单的udp demo。大体思路:

  • 写一个netty的 基于UDP的Server 用来接受数据

  • 写个一处理类,用于对接受的数据进行处理,然后返回信息

新建一个springboot项目。在pom中引入jar

pom.xml

       <!--springboot version 我用的是2.1.3.RELEASE--> <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter</artifactId>            <version>2.1.3.RELEASE</version>        </dependency>              <!--web模块的启动器 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <!-- netty依赖 springboot2.x自动导入版本 -->        <dependency>            <groupId>io.netty</groupId>            <artifactId>netty-all</artifactId>        </dependency>        <!-- 这里我用到了@slf4j 所以引入这个jar -->      <dependency>            <groupId>org.projectlombok</groupId>            <artifactId>lombok</artifactId>            <optional>true</optional>        </dependency>

创建NettyUDPServer

Channel 通道的类型

  • NioSocketChannel, 代表异步的客户端 TCP Socket 连接.

  • NioServerSocketChannel, 异步的服务器端 TCP Socket 连接.

  • NioDatagramChannel, 异步的 UDP 连接

  • NioSctpChannel, 异步的客户端 Sctp 连接.

  • NioSctpServerChannel, 异步的 Sctp 服务器端连接.

  • OioSocketChannel, 同步的客户端 TCP Socket 连接.

  • OioServerSocketChannel, 同步的服务器端 TCP Socket 连接.

  • OioDatagramChannel, 同步的 UDP 连接

  • OioSctpChannel, 同步的 Sctp 服务器端连接.

  • OioSctpServerChannel, 同步的客户端 TCP Socket 连接.

Bootstrap 是 Netty 提供的一个便利的工厂类,可以通过它来完成 Netty 的客户端或服务器端的 Netty 初始化。

package com.demo.udpdemo.UDPServer;import com.demo.udpdemo.handler.BootNettyUdpSimpleChannelInboundHandler;import io.netty.bootstrap.Bootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.ChannelOption;import io.netty.channel.EventLoopGroup;import io.netty.channel.nio.NioEventLoopGroup;import io.netty.channel.socket.nio.NioDatagramChannel;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class BootNettyUdpServer {        public void bind(int port) {        log.info("-------------------------------udpServer-------------------------");        //表示服务器连接监听线程组,专门接受 accept 新的客户端client 连接        EventLoopGroup bossLoopGroup  = new NioEventLoopGroup();        try {            //1,创建netty bootstrap 启动类            Bootstrap serverBootstrap = new Bootstrap();            //2、设置boostrap 的eventLoopGroup线程组            serverBootstrap = serverBootstrap.group(bossLoopGroup);            //3、设置NIO UDP连接通道            serverBootstrap = serverBootstrap.channel(NioDatagramChannel.class);            //4、设置通道参数 SO_BROADCAST广播形式            serverBootstrap = serverBootstrap.option(ChannelOption.SO_BROADCAST, true);            //5、设置处理类 装配流水线            serverBootstrap = serverBootstrap.handler(new BootNettyUdpSimpleChannelInboundHandler());            //6、绑定server,通过调用sync()方法异步阻塞,直到绑定成功            ChannelFuture f = serverBootstrap.bind(port).sync();            log.info(BootNettyUdpServer.class.getName()+" started and listend on "+f.channel().localAddress());            //7、监听通道关闭事件,应用程序会一直等待,直到channel关闭            f.channel().closeFuture().sync();        } catch (Exception e) {            // TODO: handle exception        } finally {            System.out.println("netty udp close!");            //8 关闭EventLoopGroup,            bossLoopGroup.shutdownGracefully();        }    }}

NettyUdpSimpleChannelInboundHandler

package com.demo.udpdemo.handler;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHandlerContext;import io.netty.channel.SimpleChannelInboundHandler;import io.netty.channel.socket.DatagramPacket;import io.netty.util.CharsetUtil;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class BootNettyUdpSimpleChannelInboundHandler extends SimpleChannelInboundHandler<DatagramPacket> {    @Override    protected void channelRead0(ChannelHandlerContext ctx, DatagramPacket msg) throws Exception {        try {            String strdata = msg.content().toString(CharsetUtil.UTF_8);            //打印收到的消息            log.info("---------------------receive data--------------------------");            log.info(strdata);            log.info("---------------------receive data--------------------------");            //收到udp消息后,可通过此方式原路返回的方式返回消息,例如返回时间戳            ctx.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer("ok", CharsetUtil.UTF_8), msg.sender()));        } catch (Exception e) {        }    }}

修改启动类,启动执行UDPServer.bind方法,启动udpServer

@SpringBootApplication@EnableAsyncpublic class UdpDemoApplication implements CommandLineRunner {    public static void main(String[] args) {        SpringApplication app = new SpringApplication(UdpDemoApplication.class);        app.run(args);    }    @Async    @Override    public void run(String... args){       new BootNettyUdpServer().bind(51000);    }}

test

在test类下面,新建一个test方法

sendUdpRequestTest

  //定义客户端ip  private static final String SERVER_HOSTNAME = "127.0.0.1";    // 服务器端口    private static final int SERVER_PORT = 51000;    // 本地发送端口    private static final int LOCAL_PORT = 8888; @Test    public void sendUdpRequestTest() {        try {            // 1,创建udp服务。通过DatagramSocket对象。            DatagramSocket socket = new DatagramSocket(LOCAL_PORT);            // 2,确定数据,并封装成数据包。DatagramPacket(byte[] buf, int length, InetAddress            // address, int port)            byte[] buf = "hello".getBytes();            DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName(SERVER_HOSTNAME),                    SERVER_PORT);            // 3,通过socket服务,将已有的数据包发送出去。通过send方法。            socket.send(dp);            // 4,关闭资源。            socket.close();        } catch (IOException e) {            e.printStackTrace();        }    }

结果

2021-09-03 13:14:47.912 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:14:47.912 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : 你好,世界
2021-09-03 13:14:47.912 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:16:11.748 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:16:11.748 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : 你好,世界
2021-09-03 13:16:11.748 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:17:11.664 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:17:11.664 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : hello
2021-09-03 13:17:11.664 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:17:32.714 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------
2021-09-03 13:17:32.714 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : hello
2021-09-03 13:17:32.714 INFO 11608 --- [ntLoopGroup-2-1] .BootNettyUdpSimpleChannelInboundHandler : ---------------------receive data--------------------------

感谢你能够认真阅读完这篇文章,希望小编分享的“Springboot中怎么用Netty开启UDP服务方式”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Springboot中怎么用Netty开启UDP服务方式

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Springboot中怎么用Netty开启UDP服务方式

这篇文章主要介绍了Springboot中怎么用Netty开启UDP服务方式,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。NettyNetty是一种提供网络编程的工具,是对so
2023-06-25

linux怎么开启udp服务

要在Linux上开启UDP服务,可以按照以下步骤进行操作:1. 打开终端窗口,使用root用户或具有管理员权限的用户登录。2. 使用以下命令安装UDP服务程序(例如,如果使用的是Debian或Ubuntu系统,可以使用apt-get命令):
2023-10-09

windows7怎么开启telnet服务方式介绍

windows7怎么开启telnet服务呢,这个Telnet是电脑中进行的一项远程登陆服务协议和方法,用户假如应用系统的网络服务的话就需要该服务,不过一般客户不清楚如何开启这个服务,其实很简单,根据进到控制面板找到程序就能进一步开启了,下面
2023-07-11

Windows11中怎么启用开发者模式

本篇内容主要讲解“Windows11中怎么启用开发者模式”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Windows11中怎么启用开发者模式”吧!第 1 步:按Wi
2023-04-29

linux中怎么开启telnet服务

linux中怎么开启telnet服务,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。方法:1. 切换至root用户;2. 如果Linux没有安装telnet服务需
2023-06-12

debian中怎么开启ssh服务

要在Debian中开启SSH服务,可以按照以下步骤操作:安装OpenSSH服务器软件包:sudo apt-get updatesudo apt-get install openssh-server启动SSH服务:sudo systemct
debian中怎么开启ssh服务
2024-03-13

Centos6.7中怎么怎么开启sshd服务

Centos6.7中怎么怎么开启sshd服务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1、使用“chkconfig --list | grep sshd”命令来查看sshd
2023-06-10

linux服务中开启防火墙的两种方式

存在以下两种方式: 一、service方式 查看防火墙状态: [root@centos6 ~]# service iptables status iptables:未运行防火墙。 开启防火墙: [root@centos6 ~]# servi
2022-06-04

win7怎么开启任务管理器快捷打开方式

本篇内容介绍了“win7怎么开启任务管理器快捷打开方式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法一:在任务栏空白处右键点击,然后选择
2023-06-28

开传奇云服务器怎么开启游戏模式

登录云服务器控制台:首先需要登录云服务器控制台,输入相应的账号和密码进行登录。控制台会自动将用户分配到相应的云服务器节点上,以便用户可以通过云服务器进行游戏。选择游戏模式:在云服务器控制台中,选择需要开启的游戏模式,如“自动战斗”、“快速游戏”等。在游戏模式的选择界面中,会列出当前游戏中的所有功能和设置,用户可以根据自
开传奇云服务器怎么开启游戏模式
2023-10-28

Win10怎么开启自动升级系统设置?电脑自动更新服务开启方式

Win10怎么开启自动升级系统设置?一些好朋友发觉计算机不可以自动升级系统软件,实际上这是由于计算机禁止使用了WindowsUpdate服务项,大伙儿只需将其开启就可以,今日我们要详细介绍的是Win10电脑自动更新服务开启方式。1、按Win
2023-07-10

云服务器怎么开启声音功能模式

如果您的云服务器使用了声卡或者麦克风来实现语音通话功能,那么您可以尝试下面的方法:检查您的语音设置是否正确。打开您的麦克风和扬声器来尝试语音通话。检查您的声卡驱动是否正确。在以上方法都无效的情况下,您可以尝试以下的解决方法:检查您的麦克风设置是否正确。重新启动云服务器。尝试重装您的声卡驱动程序。请注意,上述方法不能解决所有问题,有些问题可能与您的云服务器硬件故障有关。如果
2023-10-26

Android中startservice开启服务的方法是什么

在Android中,可以使用startService()方法来开启服务。该方法接受两个参数,第一个参数是Intent对象,用于指定要启动的服务,第二个参数是一个ServiceConnection对象,用于服务的绑定。下面是使用startSe
Android中startservice开启服务的方法是什么
2024-02-29

CentOS中怎么设置开机启动服务

这篇文章将为大家详细讲解有关CentOS中怎么设置开机启动服务,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。可以修改开机启动配置只需修改:vi /etc/sysconfig/network-
2023-06-10

怎么用阿里云开方舟服务器模式

什么是方舟服务器模式?方舟服务器模式是方舟生存进化(Ark:SurvivalEvolved)游戏中的一个服务器模式,它允许玩家在云平台上创建自己的服务器,并与其他玩家进行多人在线游戏。在方舟服务器模式下,你可以选择不同的地图和生物群落,建立自己的基地和社区,与其他玩家进行互动和合作。如何在阿里云上开启方舟服务器模式?在
怎么用阿里云开方舟服务器模式
2024-01-22

阿里云服务器怎么开分机启动模式

首先,要使用分机启动模式,需要在云服务器上开启多个主机名,每个主机名都可以独立运行一个应用程序。例如,A主机名可以运行一个后端应用程序,B主机名可以运行一个前端应用程序,C主机名可以运行一个数据库等。接下来,在主机名中添加所需的应用程序和端口。这里需要注意的是,不同的应用程序需要不同的端口才能在同一台云服务器上运行,因
阿里云服务器怎么开分机启动模式
2023-10-28

云服务器怎么开启声音功能模式啊

在云服务器的设计中,声音功能模式可以为用户提供更加直观、易用的控制界面。当用户访问云服务器时,系统会自动开启声音功能,允许用户控制服务器的音频设置,例如音量、音频输出等等。对于企业用户而言,声音功能模式也可以为他们提供更加便捷的服务。当用户在使用云服务器时,他们可以通过控制面板来控制服务器的音频设置,例如音量、音频输出
云服务器怎么开启声音功能模式啊
2023-10-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录