当前位置: 首页 > article >正文

Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)

Netty

Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。
在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和workerGroup。bossGroup负责接收客户端的连接请求,并将这些连接分配给workerGroup中的工作线程进行处理。每个工作线程都是一个独立的EventLoop,它负责处理分配给它的连接上的所有I/O事件。
由于Netty的EventLoop是非阻塞的,并且每个EventLoop都可以同时处理多个连接,因此Netty服务器能够高效地处理大量的并发连接。此外,Netty还提供了多种优化技术,如零拷贝、内存池等,以进一步提高性能。
基于Netty的TCP服务器是支持并发的,并且能够处理大量的并发连接。可以根据需要调整EventLoopGroup的线程数、优化处理器逻辑等,以满足应用程序的特定需求。

协议

TCP协议

数据格式

字段 长度 说明
cmdLen 2 json长度(高位优先)
cmdPayload n json内容
dataLen 2 数据长度(高位优先)
dataPayload n 文件二进制数据内容

在Spring Boot项目中集成Netty来创建一个TCP服务器。

在Spring Boot项目中集成Netty来创建一个TCP服务器是一个常见的需求,特别是在需要高性能、低延迟的网络通信时。

添加依赖

首先,在你的pom.xml文件中添加Netty的依赖:

<dependencies>
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.68.Final</version>
    </dependency>
</dependencies>

创建Netty服务器配置类

创建一个配置类来启动Netty服务器。

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
 
@Configuration
public class NettyServerConfig {
   
 
    private final int port = 8080;
    private EventLoopGroup bossGroup;
    private EventLoopGroup workerGroup;
    private ChannelFuture channelFuture;
 
    @PostConstruct
    public void start() throws Exception {
   
        bossGroup = new NioEventLoopGroup(1);
        workerGroup = new NioEventLoopGroup();
        try {
   
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup

http://www.kler.cn/a/459480.html

相关文章:

  • 黑马Java面试教程_P10_设计模式
  • JavaScript中如何创建对象
  • 闪存知识科普-基本储存单元结构
  • Three.js教程010:几何体划分顶点组设置不同材质
  • SpringCloud源码分析-LoadBalancer
  • leetcode------mysql
  • 纯血鸿蒙ArkUI线性布局详解
  • 【Vue 教程】使用 Vite 快速搭建前端工程化
  • Go singleflight库源码分析
  • 2.阿里云flinkselectdb-jar作业
  • 【React】- 跨域PDF预览、下载(改文件名)、打印
  • Flink如何处理迟到数据?
  • Python毕业设计选题:基于Hadoop 的国产电影数据分析与可视化_django+spider
  • C++ 函数式编程Lambda表达式
  • 磁编码器(Magnetic Encoder)
  • 【每日学点鸿蒙知识】Web嵌套滚动体验、拷贝传递 ArrayBuffer异常问题、ObjectLink 的属性传递、构建读取参数
  • 【高阶数据结构】红黑树封装map、set
  • leetcode hot100 tire前缀树
  • go语言中zero框架项目日志收集与配置
  • 【2024年-7月-6日-开源社区openEuler实践记录】探秘 Qingzhou:开启高效开发与运维新旅程
  • 012-spring的注解开发、bean的属性、IOC实现原理
  • 【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地
  • 基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
  • EL表达式与JSTL
  • Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读
  • Java基础(三):桌球案例