54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
#! /usr/bin/env node
|
|
|
|
const mqtt = require('mqtt')
|
|
const convertHrtime = require('convert-hrtime')
|
|
const mode = require('compute-mode')
|
|
const client = mqtt.connect({ port: 1883, host: 'localhost', clean: true, keepalive: 0 })
|
|
const interval = 5000
|
|
|
|
let sent = 0
|
|
const latencies = []
|
|
|
|
function count () {
|
|
console.log('sent/s', sent / interval * 1000)
|
|
sent = 0
|
|
}
|
|
|
|
setInterval(count, interval)
|
|
|
|
function publish () {
|
|
sent++
|
|
client.publish('test', JSON.stringify(process.hrtime()), { qos: 1 })
|
|
}
|
|
|
|
function subscribe () {
|
|
client.subscribe('test', { qos: 1 }, publish)
|
|
}
|
|
|
|
client.on('connect', subscribe)
|
|
client.on('message', publish)
|
|
client.on('message', function (topic, payload) {
|
|
const sentAt = JSON.parse(payload)
|
|
const diff = process.hrtime(sentAt)
|
|
latencies.push(convertHrtime(diff).ms)
|
|
})
|
|
|
|
client.on('offline', function () {
|
|
console.log('offline')
|
|
})
|
|
|
|
client.on('error', function () {
|
|
console.log('reconnect!')
|
|
client.stream.end()
|
|
})
|
|
|
|
process.on('SIGINT', function () {
|
|
const total = latencies.reduce(function (acc, num) {
|
|
return acc + num
|
|
})
|
|
console.log('total', total)
|
|
console.log('average', total / latencies.length)
|
|
console.log('mode', mode(latencies))
|
|
process.exit(0)
|
|
})
|