mqtt压力测试linux,mqtt服务压力测试

该博客展示了如何使用Go语言实现并发连接到MQTT服务器并发布消息的示例。代码创建了多个客户端,每个客户端连接到指定的MQTT服务器,并周期性地向特定主题发送消息。当连接失败时,会记录失败次数。博客突出了Go的并发特性和MQTT库的使用。
摘要由CSDN通过智能技术生成

import (

"flag"

"fmt"

"sync"

"time"

//导入mqtt包

MQTT "github.com/eclipse/paho.mqtt.golang"

)

var f MQTT.MessageHandler = func(client MQTT.Client, msg MQTT.Message) {

fmt.Printf("TOPIC: %s

", msg.Topic())

fmt.Printf("MSG: %s

", msg.Payload())

}

var fail_nums int = 0

func main() {

//生成连接的客户端数

c := flag.Uint64("n", 3000, "client nums")

flag.Parse()

nums := int(*c)

wg := sync.WaitGroup{}

for i := 0; i < nums; i++ {

wg.Add(1)

time.Sleep(5 * time.Millisecond)

go createTask(i, &wg)

}

wg.Wait()

}

func createTask(taskId int, wg *sync.WaitGroup) {

defer wg.Done()

opts := MQTT.NewClientOptions().AddBroker("tcp://192.168.1.110:1883").SetUsername("test").SetPassword("test")

opts.SetClientID(fmt.Sprintf("go-simple-client:%d-%d", taskId, time.Now().Unix()))

opts.SetDefaultPublishHandler(f)

opts.SetConnectTimeout(time.Duration(60) * time.Second)

//创建连接

c := MQTT.NewClient(opts)

if token := c.Connect(); token.WaitTimeout(time.Duration(60)*time.Second) && token.Wait() && token.Error() != nil {

fail_nums++

fmt.Printf("taskId:%d,fail_nums:%d,error:%s

", taskId, fail_nums, token.Error())

return

}

//每隔5秒向topic发送一条消息

i := 0

for {

i++

time.Sleep(time.Duration(5) * time.Second)

text := fmt.Sprintf("this is msg #%d! from task:%d", i, taskId)

token := c.Publish("test", 1, false, text)

token.Wait()

}

c.Disconnect(250)

fmt.Println("task ok!!")

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值