Skip to content

生命周期事件

演示 broker 级事件:clientclientReadyclientDisconnectkeepaliveTimeoutpublishsubscribe 等。每个事件用 app.on(name, handler) 打日志——做连接追踪和排查很顺手。

bash
bun run --cwd examples/events dev

监听 mqtt://localhost:1884ws://localhost:8889/mqtt

源码

ts
import { aedes } from '@mqttkit/aedes'
import { MqttApp, router, type MqttEventName } from '@mqttkit/core'

const app = new MqttApp()
  .use(aedes({ tcp: { port: 1884 }, ws: { port: 8889, path: '/mqtt' } }))
  .use(
    router()
      .topic('events/:id/inbound', {
        onMessage(ctx) {
          console.log('handler', ctx.params.id, ctx.payload.toString())
        },
      })
      .topic('events/:id/outbound'),
  )

const eventNames: MqttEventName[] = [
  'client',
  'clientReady',
  'clientDisconnect',
  'keepaliveTimeout',
  'clientError',
  'connectionError',
  'connackSent',
  'ping',
  'publish',
  'ack',
  'subscribe',
  'unsubscribe',
]

for (const eventName of eventNames) {
  app.on(eventName, (event) => {
    console.log('mqtt event', event.type, {
      clientId: event.clientId,
      topic: event.topic,
      error: event.error instanceof Error ? event.error.message : undefined,
    })
  })
}

await app.listen()
console.log('mqttkit events example listening on mqtt://localhost:1884 and ws://localhost:8889/mqtt')

在 GitHub 查看 · Events 指南

基于 MIT 协议发布