pingpong.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #! /usr/bin/env node
  2. const mqtt = require('mqtt')
  3. const convertHrtime = require('convert-hrtime')
  4. const mode = require('compute-mode')
  5. const client = mqtt.connect({ port: 1883, host: 'localhost', clean: true, keepalive: 0 })
  6. const interval = 5000
  7. let sent = 0
  8. const latencies = []
  9. function count () {
  10. console.log('sent/s', sent / interval * 1000)
  11. sent = 0
  12. }
  13. setInterval(count, interval)
  14. function publish () {
  15. sent++
  16. client.publish('test', JSON.stringify(process.hrtime()), { qos: 1 })
  17. }
  18. function subscribe () {
  19. client.subscribe('test', { qos: 1 }, publish)
  20. }
  21. client.on('connect', subscribe)
  22. client.on('message', publish)
  23. client.on('message', function (topic, payload) {
  24. const sentAt = JSON.parse(payload)
  25. const diff = process.hrtime(sentAt)
  26. latencies.push(convertHrtime(diff).ms)
  27. })
  28. client.on('offline', function () {
  29. console.log('offline')
  30. })
  31. client.on('error', function () {
  32. console.log('reconnect!')
  33. client.stream.end()
  34. })
  35. process.on('SIGINT', function () {
  36. const total = latencies.reduce(function (acc, num) {
  37. return acc + num
  38. })
  39. console.log('total', total)
  40. console.log('average', total / latencies.length)
  41. console.log('mode', mode(latencies))
  42. process.exit(0)
  43. })