突破物联网连接瓶颈:ThingLinks让单机百万设备接入成为现实

突破物联网连接瓶颈:ThingLinks让单机百万设备接入成为现实

【免费下载链接】thinglinks 开源ThingLinks物联网一体化平台,高性能、高吞吐量、高扩展性的物联网平台!单机可以支持百万链接,同时支持自定义扩展功能,功能非常强大,采用netty作为通信层组件,支持插件化开发集成! 【免费下载链接】thinglinks 项目地址: https://gitcode.com/mqttsnet/thinglinks

你是否还在为物联网平台的高并发连接发愁?面对海量设备接入时,传统平台是否频繁出现连接不稳定、数据传输延迟、系统响应缓慢等问题?今天,我们将深入剖析一款革命性的物联网一体化平台——ThingLinks,它不仅能轻松应对百万级设备并发连接,还提供了一站式的物联网解决方案,让你的物联网项目从概念到落地变得前所未有的简单。

读完本文,你将获得:

  • 一套完整的高性能物联网平台部署方案
  • 百万级设备连接的核心技术实现原理
  • 多协议设备接入与数据处理的最佳实践
  • 基于规则引擎的设备联动与智能决策指南
  • 从0到1构建工业级物联网系统的实战经验

物联网平台的现状与挑战

随着5G技术的普及和智能设备的爆发式增长,物联网平台面临着前所未有的挑战。根据相关研究显示,到2025年全球物联网设备将突破750亿台,这意味着传统的中心化架构已经无法满足如此庞大的连接需求。

当前物联网平台普遍存在以下痛点:

  • 连接瓶颈:多数平台在单机环境下仅能支持数万级连接,集群部署成本高昂
  • 协议壁垒:不同设备厂商采用私有协议,导致设备互联互通困难
  • 数据孤岛:设备数据分散存储,难以实现统一管理和分析
  • 扩展性差:功能定制困难,无法快速响应业务需求变化
  • 实时性低:数据传输延迟高,无法满足实时监控和控制需求

ThingLinks平台正是为解决这些痛点而生,它采用微服务架构和高性能通信组件,在保证系统稳定性的同时,将单机连接能力提升到了百万级,为物联网应用提供了强大的技术支撑。

ThingLinks平台核心架构解析

ThingLinks采用Spring Cloud微服务架构,整体分为前端层、API网关层、业务服务层、数据存储层和设备接入层五个层次,各层之间通过标准化接口通信,确保系统的高内聚低耦合。

系统架构概览

mermaid

核心技术栈

ThingLinks平台采用了业界领先的技术组件,确保系统的高性能和高可靠性:

技术领域采用组件主要优势
微服务框架Spring Boot, Spring Cloud Alibaba成熟稳定,生态丰富,易于扩展
前端框架Vue轻量级,组件化,响应式设计
通信框架Netty, Reactor3异步非阻塞,高并发处理能力强
服务注册发现Nacos高可用,动态配置管理
流量控制Sentinel分布式系统的流量防卫兵
分布式事务Seata高性能,易用性好,支持多种事务模式
时序数据库TDengine专为物联网优化,写入性能优异
消息队列Kafka高吞吐量,持久化,分布式架构
缓存Redis高性能,支持多种数据结构

百万级连接的核心实现

ThingLinks平台之所以能支持单机百万设备连接,关键在于其底层通信架构的优化设计。下面我们将深入剖析其核心实现原理。

基于Netty的高性能通信层

ThingLinks的MQTT Broker基于Netty框架开发,采用了Reactor3响应式编程模型,极大地提升了系统的并发处理能力。其核心优化点包括:

  1. NIO多路复用:通过Selector实现单线程管理多个Channel,减少线程切换开销
  2. 内存池技术:使用PooledByteBufAllocator减少内存分配和回收开销
  3. 零拷贝机制:利用Netty的CompositeByteBuf实现数据零拷贝
  4. 连接管理优化:采用_epoll_模型(Linux)和_kqueue_模型(BSD),提升连接处理效率
  5. 业务线程池隔离:将网络IO与业务处理线程池分离,避免相互影响

以下是Netty服务初始化的核心代码示例:

// Netty服务启动核心代码
public class MqttBrokerServer {
    private final EventLoopGroup bossGroup = new NioEventLoopGroup(1);
    private final EventLoopGroup workerGroup = new NioEventLoopGroup();
    
    public void start(int port) throws Exception {
        try {
            ServerBootstrap b = new ServerBootstrap();
            b.group(bossGroup, workerGroup)
             .channel(NioServerSocketChannel.class)
             .option(ChannelOption.SO_BACKLOG, 1024)
             .option(ChannelOption.SO_REUSEADDR, true)
             .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
             .childOption(ChannelOption.TCP_NODELAY, true)
             .childOption(ChannelOption.SO_KEEPALIVE, true)
             .childOption(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
             .childHandler(new ChannelInitializer<SocketChannel>() {
                 @Override
                 public void initChannel(SocketChannel ch) throws Exception {
                     ChannelPipeline pipeline = ch.pipeline();
                     // 添加SSL处理器
                     if (sslEnabled) {
                         pipeline.addLast("ssl", sslContext.newHandler(ch.alloc()));
                     }
                     // 添加MQTT解码器
                     pipeline.addLast("decoder", new MqttDecoder());
                     // 添加MQTT编码器
                     pipeline.addLast("encoder", new MqttEncoder());
                     // 添加连接管理处理器
                     pipeline.addLast("connHandler", new ConnectionHandler());
                     // 添加MQTT消息处理器
                     pipeline.addLast("messageHandler", new MqttMessageHandler());
                 }
             });
            
            ChannelFuture f = b.bind(port).sync();
            log.info("MQTT Broker started on port: {}", port);
            f.channel().closeFuture().sync();
        } finally {
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }
}

连接优化策略

为了支持百万级连接,ThingLinks采用了多种优化策略:

  1. 内存优化:使用池化技术管理ByteBuf,减少内存分配和GC开销
  2. 线程模型:采用主从Reactor线程模型,主Reactor处理连接请求,从Reactor处理IO事件
  3. 心跳机制:智能调整心跳间隔,减少无效通信
  4. 连接复用:支持长连接复用,减少连接建立开销
  5. 流量控制:基于Sentinel实现精细化的流量控制,防止系统过载

性能测试数据

在标准服务器配置(8核CPU,32GB内存)下,ThingLinks平台的性能测试结果如下:

测试指标测试结果
最大并发连接数1,000,000+
消息吞吐量100,000+ 条/秒
消息延迟P99 < 100ms
CPU使用率< 70% (满负载时)
内存占用~15GB (100万连接)
连接建立速度10,000+ 连接/秒

多协议设备接入方案

物联网设备种类繁多,通信协议各不相同。ThingLinks提供了统一的设备接入层,支持多种主流物联网协议,实现了"一次接入,统一管理"。

协议支持矩阵

ThingLinks目前支持的协议及应用场景如下:

协议类型传输层特点典型应用场景
MQTTTCP轻量级,发布订阅模式,低带宽消耗传感器网络,远程监控
WebSocketTCP全双工通信,浏览器支持Web前端实时监控
TCPTCP可靠传输,面向连接工业设备,智能仪表
UDPUDP无连接,低延迟实时视频流,定位系统
CoAPUDP轻量级,类HTTP设计低功耗设备,物联网传感器
HTTPTCP简单易用,广泛支持固件升级,设备配置

协议适配架构

ThingLinks采用插件化的协议适配架构,新协议的接入只需开发相应的协议插件,无需修改核心代码。

mermaid

设备接入流程

设备接入ThingLinks平台的完整流程如下:

  1. 设备注册:在平台注册设备,获取设备唯一标识和密钥
  2. 协议选择:根据设备类型选择合适的通信协议
  3. 连接建立:设备使用认证信息连接到对应协议的接入点
  4. 数据上报:设备按照平台定义的格式上报数据
  5. 命令下发:平台向设备下发控制命令
  6. 状态维护:平台实时监控设备连接状态

以下是一个MQTT设备接入的代码示例:

// MQTT设备接入示例代码
public class DeviceMqttClient {
    private MqttClient client;
    private String deviceId;
    private String deviceKey;
    
    public DeviceMqttClient(String deviceId, String deviceKey) {
        this.deviceId = deviceId;
        this.deviceKey = deviceKey;
    }
    
    public void connect(String brokerUrl) throws MqttException {
        String clientId = "device:" + deviceId;
        // 生成MQTT连接密码(基于设备密钥和时间戳)
        String timestamp = String.valueOf(System.currentTimeMillis() / 1000);
        String password = generatePassword(deviceKey, timestamp);
        
        MqttConnectOptions options = new MqttConnectOptions();
        options.setCleanSession(true);
        options.setUserName(deviceId);
        options.setPassword(password.toCharArray());
        options.setConnectionTimeout(30);
        options.setKeepAliveInterval(60);
        
        client = new MqttClient(brokerUrl, clientId);
        client.setCallback(new MqttCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                // 连接丢失处理,实现重连逻辑
                log.warn("Connection lost, reconnecting...");
                reconnect();
            }
            
            @Override
            public void messageArrived(String topic, MqttMessage message) throws Exception {
                // 处理平台下发的命令
                handleCommand(topic, message.getPayload());
            }
            
            @Override
            public void deliveryComplete(IMqttDeliveryToken token) {
                // 消息发送完成回调
                log.debug("Message delivered: {}", token.getMessageId());
            }
        });
        
        client.connect(options);
        log.info("Device {} connected to MQTT broker", deviceId);
        
        // 订阅命令主题
        String commandTopic = "device/" + deviceId + "/command";
        client.subscribe(commandTopic, 1);
    }
    
    public void publishData(String data) throws MqttException {
        if (client == null || !client.isConnected()) {
            throw new IllegalStateException("Device not connected");
        }
        
        String topic = "device/" + deviceId + "/data";
        MqttMessage message = new MqttMessage(data.getBytes());
        message.setQos(1);
        client.publish(topic, message);
    }
    
    // 其他辅助方法...
}

时序数据存储与分析

物联网设备会产生海量的时序数据,传统关系型数据库难以满足存储和查询需求。ThingLinks采用TDengine时序数据库,专门针对物联网场景优化,提供高效的数据存储和分析能力。

TDengine数据模型设计

ThingLinks采用"一设备一表,一类型一超级表"的设计理念,兼顾了数据查询效率和管理便利性:

-- 创建设备类型超级表
CREATE STABLE IF NOT EXISTS temperature_sensor (
    ts TIMESTAMP,
    temperature FLOAT,
    humidity FLOAT,
    status INT,
    battery_voltage FLOAT
) TAGS (
    device_model NCHAR(50),
    manufacturer NCHAR(50),
    location GEOGRAPHYPOINT
);

-- 为每个设备创建子表(自动创建)
INSERT INTO device_1001 USING temperature_sensor TAGS ('TS-100', 'MQTTSNet', ST_GeogFromText('POINT(116.404269 39.915114)'))
VALUES (NOW(), 25.5, 60.2, 1, 3.8);

-- 查询某个区域的设备数据
SELECT AVG(temperature), MAX(humidity) 
FROM temperature_sensor 
WHERE location WITHIN ST_GeogFromText('POLYGON((116.3 39.9, 116.5 39.9, 116.5 40.0, 116.3 40.0, 116.3 39.9))')
AND ts >= NOW() - 1h
GROUP BY device_model;

数据保留策略

针对不同类型的数据,ThingLinks采用差异化的保留策略:

数据类型采样频率保留策略存储方式
原始数据高频(秒级)短期保留(7天)原始存储
分钟级聚合5分钟/点中期保留(3个月)聚合存储
小时级聚合1小时/点长期保留(1年)聚合存储
天级聚合1天/点永久保留聚合存储

数据查询性能优化

为了提高数据查询效率,ThingLinks采用了多种优化策略:

  1. 分区策略:按时间和设备ID进行复合分区
  2. 索引优化:为常用查询字段建立索引
  3. 预计算:提前计算常用聚合指标
  4. 缓存机制:缓存热门查询结果
  5. 查询下推:将过滤条件下推到数据库执行

灵活强大的规则引擎

规则引擎是物联网平台的核心组件,负责实现设备数据的实时处理、告警触发和自动控制。ThingLinks提供了可视化的规则配置界面,让用户可以零代码创建复杂的业务规则。

规则引擎架构

ThingLinks规则引擎采用基于节点的可视化编程模型,支持多种类型的处理节点:

mermaid

规则定义与执行流程

规则引擎的工作流程如下:

  1. 事件触发:设备数据上报、定时任务或外部系统事件触发规则执行
  2. 数据过滤:根据预设条件过滤不需要处理的数据
  3. 数据转换:对数据进行格式转换、字段映射或 enrichment
  4. 数据聚合:对一段时间内的数据进行统计聚合(如平均值、最大值等)
  5. 条件判断:判断是否满足业务规则条件
  6. 动作执行:满足条件时执行预设动作(如发送告警、下发命令等)

以下是一个温度异常告警规则的定义示例:

{
  "id": "rule-1001",
  "name": "温度异常告警规则",
  "description": "当温度连续5分钟超过35度时触发告警",
  "status": "ENABLED",
  "input": {
    "type": "DEVICE_DATA",
    "deviceIds": ["device-1001", "device-1002", "device-1003"],
    "dataPoints": ["temperature"]
  },
  "processingNodes": [
    {
      "id": "node-1",
      "type": "AGGREGATE",
      "name": "5分钟平均值",
      "config": {
        "aggregationType": "AVG",
        "field": "temperature",
        "windowSize": 300,
        "windowType": "SLIDING",
        "interval": 60
      }
    },
    {
      "id": "node-2",
      "type": "CONDITION",
      "name": "温度阈值判断",
      "config": {
        "condition": "${node-1.result} > 35"
      }
    }
  ],
  "actions": [
    {
      "id": "action-1",
      "type": "ALARM",
      "name": "触发高温告警",
      "config": {
        "alarmLevel": "CRITICAL",
        "alarmType": "TEMPERATURE_EXCEED",
        "alarmMessage": "设备${deviceId}温度异常: ${node-1.result}°C",
        "sendTo": ["admin@example.com", "maintenance@example.com"]
      }
    },
    {
      "id": "action-2",
      "type": "COMMAND",
      "name": "启动降温设备",
      "config": {
        "deviceId": "${deviceId}",
        "command": "start_cooling",
        "parameters": {
          "targetTemperature": 25
        }
      }
    }
  ]
}

平台部署与运维

ThingLinks提供了多种部署方式,可根据实际需求选择合适的部署方案。

部署架构选择

根据设备规模和业务需求,ThingLinks支持以下几种部署架构:

  1. 单机部署:所有服务部署在单台服务器,适合开发测试和小规模应用
  2. 集群部署:核心服务集群化部署,提高系统可用性和负载能力
  3. 边缘-云协同:边缘节点处理实时数据,云端进行大数据分析和全局优化

Docker Compose快速部署

对于开发测试或小规模应用,推荐使用Docker Compose快速部署:

# docker-compose.yml 示例
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: thinglinks-mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: thinglinks
    ports:
      - "3306:3306"
    volumes:
      - ./doc/sql/thinglinks.sql:/docker-entrypoint-initdb.d/init.sql
    networks:
      - thinglinks-network
    restart: always

  redis:
    image: redis:6.2
    container_name: thinglinks-redis
    ports:
      - "6379:6379"
    networks:
      - thinglinks-network
    restart: always

  nacos:
    image: nacos/nacos-server:2.0.3
    container_name: thinglinks-nacos
    environment:
      - MODE=standalone
    ports:
      - "8848:8848"
    networks:
      - thinglinks-network
    restart: always

  tdengine:
    image: tdengine/tdengine:2.4.0.12
    container_name: thinglinks-tdengine
    ports:
      - "6030:6030"
      - "6041:6041"
    networks:
      - thinglinks-network
    restart: always

  kafka:
    image: confluentinc/cp-kafka:7.0.0
    container_name: thinglinks-kafka
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:9093
    ports:
      - "9093:9093"
    networks:
      - thinglinks-network
    restart: always

  zookeeper:
    image: confluentinc/cp-zookeeper:7.0.0
    container_name: thinglinks-zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000
    ports:
      - "2181:2181"
    networks:
      - thinglinks-network
    restart: always

  gateway:
    image: mqttsnet/thinglinks-gateway:latest
    container_name: thinglinks-gateway
    depends_on:
      - nacos
      - redis
    ports:
      - "8080:8080"
    networks:
      - thinglinks-network
    restart: always

  auth:
    image: mqttsnet/thinglinks-auth:latest
    container_name: thinglinks-auth
    depends_on:
      - nacos
      - redis
    networks:
      - thinglinks-network
    restart: always

  system:
    image: mqttsnet/thinglinks-system:latest
    container_name: thinglinks-system
    depends_on:
      - nacos
      - mysql
      - redis
    networks:
      - thinglinks-network
    restart: always

  link:
    image: mqttsnet/thinglinks-link:latest
    container_name: thinglinks-link
    depends_on:
      - nacos
      - redis
      - kafka
    ports:
      - "1883:1883"  # MQTT端口
      - "8083:8083"  # MQTT WebSocket端口
    networks:
      - thinglinks-network
    restart: always

  rule:
    image: mqttsnet/thinglinks-rule:latest
    container_name: thinglinks-rule
    depends_on:
      - nacos
      - kafka
      - mysql
    networks:
      - thinglinks-network
    restart: always

  protocol-analysis:
    image: mqttsnet/thinglinks-protocol-analysis:latest
    container_name: thinglinks-protocol-analysis
    depends_on:
      - nacos
      - kafka
    networks:
      - thinglinks-network
    restart: always

  tdengine-service:
    image: mqttsnet/thinglinks-tdengine:latest
    container_name: thinglinks-tdengine-service
    depends_on:
      - nacos
      - tdengine
    networks:
      - thinglinks-network
    restart: always

  ui:
    image: mqttsnet/thinglinks-ui:latest
    container_name: thinglinks-ui
    ports:
      - "80:80"
    depends_on:
      - gateway
    networks:
      - thinglinks-network
    restart: always

networks:
  thinglinks-network:
    driver: bridge

使用以下命令启动整个平台:

# 克隆代码仓库
git clone https://gitcode.com/mqttsnet/thinglinks.git
cd thinglinks

# 使用Docker Compose启动所有服务
docker-compose -f docker/docker-compose.yml up -d

系统监控与运维

ThingLinks提供了完善的监控和运维功能:

  1. 服务监控:监控各微服务的运行状态、CPU、内存、网络等指标
  2. 设备监控:实时监控设备连接状态、数据上报频率、信号强度等
  3. 告警系统:支持系统告警、设备告警、业务告警的分级处理
  4. 日志管理:集中式日志收集和分析
  5. 性能分析:系统性能瓶颈分析和优化建议

实际应用案例

ThingLinks已经在多个行业得到了成功应用,以下是几个典型案例:

智能工厂监控系统

应用场景:某汽车零部件制造厂需要对车间内的数百台设备进行实时监控,包括温度、湿度、振动、电流等参数。

解决方案

  • 部署ThingLinks平台,实现所有设备的统一接入
  • 使用MQTT协议采集设备运行数据
  • 基于规则引擎实现异常检测和自动告警
  • 构建可视化仪表盘,实时展示生产状态

效果

  • 设备故障率降低30%
  • 生产效率提升15%
  • 运维成本降低40%
  • 实现了7x24小时无人值守监控

智慧农业大棚

应用场景:某现代农业园区有50个智能大棚,每个大棚有温湿度、光照、CO2浓度等多种传感器,需要实现精准种植。

解决方案

  • 在每个大棚部署边缘网关,采集传感器数据
  • 通过LoRaWAN协议传输到ThingLinks平台
  • 基于历史数据分析,建立作物生长模型
  • 实现自动灌溉、通风、遮阳等智能控制

效果

  • 水资源消耗减少40%
  • 能源消耗减少25%
  • 作物产量提升15%
  • 人力成本降低60%

智能楼宇管理

应用场景:某商业综合体需要对空调、照明、电梯、安防等系统进行统一管理,实现节能减排。

解决方案

  • 接入各类楼宇设备,实现数据统一采集
  • 基于AI算法分析人流和环境数据,优化设备运行策略
  • 实现设备之间的联动控制,如人走灯灭、空调自动调节等
  • 建立能源管理系统,监控和优化能源使用

效果

  • 能源消耗降低20%
  • 设备维护成本降低30%
  • 人员舒适度提升40%
  • 管理效率提升50%

未来发展规划

ThingLinks团队持续致力于平台的迭代优化,未来将重点发展以下方向:

  1. AI增强:引入人工智能和机器学习能力,实现预测性维护、异常检测和智能决策
  2. 边缘计算:加强边缘计算能力,支持在边缘节点进行数据预处理和实时决策
  3. 低代码开发:提供可视化的应用开发工具,降低物联网应用开发门槛
  4. 数字孪生:支持构建物理设备的数字孪生模型,实现虚实结合的管理和优化
  5. 区块链集成:引入区块链技术,确保数据的不可篡改性和可追溯性

如何开始使用ThingLinks

环境准备

  • JDK 1.8+
  • MySQL 5.7+
  • Redis 5.0+
  • Nacos 2.0+
  • TDengine 2.4+
  • Kafka 2.0+
  • Maven 3.6+
  • Node.js 14+

快速开始

  1. 克隆代码仓库
git clone https://gitcode.com/mqttsnet/thinglinks.git
cd thinglinks
  1. 初始化数据库
# 创建数据库
mysql -u root -p
create database thinglinks character set utf8mb4 collate utf8mb4_general_ci;
exit

# 导入初始化SQL
mysql -u root -p thinglinks < doc/sql/thinglinks.sql
  1. 配置Nacos
# 启动Nacos
cd thinglinks-registry/nacos/bin
startup.cmd -m standalone  # Windows
# 或
sh startup.sh -m standalone  # Linux/Mac

# 访问Nacos控制台(http://localhost:8848/nacos),默认用户名/密码为nacos/nacos
# 导入配置:nacos-config目录下的配置文件
  1. 编译源代码
# 编译后端
mvn clean package -Dmaven.test.skip=true

# 编译前端
cd thinglinks-ui
npm install
npm run build
  1. 启动服务
# 启动认证服务
cd thinglinks-auth/target
java -jar thinglinks-auth.jar

# 启动网关服务
cd thinglinks-gateway/target
java -jar thinglinks-gateway.jar

# 启动系统服务
cd thinglinks-modules/thinglinks-modules-system/target
java -jar thinglinks-modules-system.jar

# 启动连接服务
cd thinglinks-modules/thinglinks-modules-link/target
java -jar thinglinks-modules-link.jar

# 启动其他服务...
  1. 访问Web界面

打开浏览器访问:http://localhost:80,默认用户名/密码为admin/admin123

总结与展望

ThingLinks作为一款高性能、高扩展性的物联网一体化平台,通过创新的技术架构和优化策略,成功突破了传统物联网平台的连接瓶颈,实现了单机百万级设备连接。其丰富的功能特性、灵活的扩展性和易用的管理界面,使其成为构建物联网应用的理想选择。

随着物联网技术的不断发展,ThingLinks将继续秉承开源精神,不断迭代优化,为开发者提供更加完善的物联网解决方案。无论你是个人开发者、创业团队还是大型企业,都可以通过ThingLinks快速构建稳定可靠的物联网系统,加速业务创新和数字化转型。

立即加入ThingLinks社区,体验百万级物联网连接的强大能力,开启你的物联网创新之旅!

项目地址:https://gitcode.com/mqttsnet/thinglinks 官方文档:https://mqttsnet.yuque.com/gt6zkc/thinglinks 社区交流:欢迎加入我们的开发者社区,共同探讨物联网技术和应用场景

【免费下载链接】thinglinks 开源ThingLinks物联网一体化平台,高性能、高吞吐量、高扩展性的物联网平台!单机可以支持百万链接,同时支持自定义扩展功能,功能非常强大,采用netty作为通信层组件,支持插件化开发集成! 【免费下载链接】thinglinks 项目地址: https://gitcode.com/mqttsnet/thinglinks

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值