• 基于Java实现的设备模拟器


    资源下载地址:https://download.csdn.net/download/sheziqiong/85788590
    资源下载地址:https://download.csdn.net/download/sheziqiong/85788590

    设备模拟器

    启动方式:

    1. java启动类:org.jetlinks.simulator.mqtt.MQTTSimulator
    2. docker:

    docker run -v handler.js:/scripts/handler.js -it --rm jetlinks/device-simulator

    1. jar包运行,下载jar包,
      执行命令java -jar device-simulator.jar

    配置

    可通过环境变量或者启动参数设置一下配置

    mqtt.address=127.0.0.1  #mqtt服务地址
    mqtt.port=1883          #mqtt端口
    mqtt.start=0            #模拟设备数量起点
    mqtt.limit=100          #模拟设备数量
    mqtt.batchSize=100      #批量连接数,每次并发连接,完成后进入下一批.
    
    mqtt.enableEvent=false  #启动事件上报
    mqtt.eventLimit=1000    #每次上报时间的最大设备数量
    mqtt.eventRate=100000   #时间上报频率,毫秒
    mqtt.scriptFile=./scripts/handler.js #消息处理脚本
    mqtt.binds=192.168.10.10,192.168.10.11 #绑定网卡(模拟设备数量较多时建议配置多个虚拟网卡)
    mqtt.bindPortStart=10000 # 指定绑定网卡时,端口的初始值,每个网卡依次递增
    
    mqtt.ssl=false                          #是否开启ssl双向认证
    mqtt.p12Path=./ssl/jetlinks-client.p12  #p12客户端证书地址
    mqtt.p12Password=jetlinks               #证书密码
    mqtt.cerPath=./ssl/jetlinks-server.cer  #信任ca证书
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    理论上,模拟设备数量小于绑定网卡数量*(65535 - bindPortStart).

    添加虚拟网卡到wlp2s0命令:

     sudo ifconfig wlp2s0:1 192.168.10.11 up
    
    • 1

    注意: linux上默认限制了端口数量,可通过命令:
    cat /proc/sys/net/ipv4/ip_local_port_range
    查看.

    可通过系统配置优化:/etc/sysctl.conf

    net.ipv4.ip_local_port_range = 1024 65535
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    net.ipv4.tcp_mem = 786432 1048576 1572864
    net.ipv4.tcp_rmem = 32768 436600 873200
    net.ipv4.tcp_wmem = 8192 436600 873200
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_timestamps = 0
    net.ipv4.tcp_window_scaling = 0
    net.ipv4.tcp_sack = 0
    net.core.netdev_max_backlog = 30000
    net.ipv4.tcp_no_metrics_save = 1
    net.core.somaxconn = 282144
    net.ipv4.tcp_syncookies = 0
    net.ipv4.tcp_max_orphans = 262144
    net.ipv4.tcp_max_syn_backlog = 262144
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2
    vm.overcommit_memory = 1
    net.netfilter.nf_conntrack_max = 1000000
    vm.max_map_count = 262144
    fs.file-max = 1000000
    fs.nr_open = 1000000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    模拟消息收发

    模拟器通过js脚本来处理消息,默认脚本文件为:./scripts/handler.js,可通过修改此脚本来实现自定义的消息处理

    //连接成功时
    simulator.onConnect(function(session){
        
    })
    
    //绑定topic处理
    simulator.bindHandler("/invoke-function", function (message, session) {
        var messageId = message.messageId;
        var functionId = message.function;
        session.sendMessage("/invoke-function-reply", JSON.stringify({
            messageId: messageId,
            functionId:functionId,
            output: "success",
            timestamp: new Date().getTime(),
            success: true
        }));
    });
    
    //当开启了事件上报时,定时(mqtt.eventRate)调用此回调发送事件数据,
    // index: 事件索引,由mqtt.eventLimit配置
    // session: mqtt连接会话
    simulator.onEvent(function (index, session) {
        session.sendMessage(JSON.stringify({
            messageId: new Date().getTime() + "" + Math.round((Math.random() * 100000)),
            event: "temperature",
            timestamp: new Date().getTime(),
            data: ((Math.random() * 100) + 1).toFixed(2)
        }))
    });
    //自定义帐号密码生成
    simulator.onAuth(function(auth,index){
        auth.setClientId("simulator-device-"+index);
        auth.setUsername("simulator-device-"+index);
        auth.setPassword("simulator-device-"+index);
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    资源下载地址:https://download.csdn.net/download/sheziqiong/85788590
    资源下载地址:https://download.csdn.net/download/sheziqiong/85788590

  • 相关阅读:
    实现地址转换的硬件机构
    LDR6020芯片驱动未来:TYPE-C桌面显示器的新篇章
    中国能否在元宇宙的未来发展中取得突破,占领高地?
    【数据结构】栈
    Flutter 填坑录 (不定时更新)
    Docker 一键安装Confluence(已支持最新版本)
    思维模型 留白效应
    前端大佬看着Java程序员的头 慕了!!!
    KNN和K-means算法复习
    数据库约束
  • 原文地址:https://blog.csdn.net/newlw/article/details/125474357