惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
G
Google Developers Blog
B
Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
人人都是产品经理
人人都是产品经理
B
Blog RSS Feed
A
About on SuperTechFans
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
aimingoo的专栏
aimingoo的专栏
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
V
Vulnerabilities – Threatpost
H
Hacker News: Front Page
T
Tor Project blog
P
Proofpoint News Feed
P
Privacy International News Feed
Recorded Future
Recorded Future
F
Fortinet All Blogs
量子位
博客园 - 聂微东
月光博客
月光博客
博客园 - Franky
SecWiki News
SecWiki News
G
GRAHAM CLULEY
腾讯CDC
Know Your Adversary
Know Your Adversary
宝玉的分享
宝玉的分享
The Cloudflare Blog
美团技术团队
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Threatpost
爱范儿
爱范儿
A
Arctic Wolf
博客园 - 叶小钗
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Project Zero
Project Zero
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - 三生石上(FineUI控件)
PCI Perspectives
PCI Perspectives
Latest news
Latest news
V
V2EX
罗磊的独立博客
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
S
Security Affairs
S
SegmentFault 最新的问题

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? - V2EX 工业软件的大佬们是怎么 vibe coding 的 - V2EX 最近 chrome 是不是有 bug 啊,一搜索就卡住 - V2EX 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 - V2EX DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的 腾讯云太不要脸了, token plan 上 glm5.1 和 minimax-m2.7,但是 coding plan 不上 - V2EX 目前自建梯子最强的 anytls 协议不是不不更新了? 刚发现 WSL2 可以通过 virtiofs 访问 NTFS 分区, IO 速度明显提升 v2board 还是其它面板更适合小团伙使用? 现在 AI 来了,如果有天不需要程序员? gpt-image-2 太顶了 你们 vibe 会让模型先输出方案来审核吗? GLM Coding Plan 调整老套餐并停止自动续订,受影响用户获赠 2 个月新套餐权益 为了浏览在线文档的时候能自定义高亮, Vibe 了一个网页高亮标记的工具 从 2 月开始用 Opus 4.6,到这几天切到 4.7,一些感悟和困惑 Github Copilot 停售之后还能买什么 收集了一下市面上常见的 Token Plan,可以给到大家一点参考 这个生图太牛了 中国的算力缺口这么大嘛?看到 2025 华为昇腾出货 81 万块,又看到各家 coding plan 不是停售就是限流 做 OPC 太难了,天天焦虑 阿里云 Coding Plan 增加动态限流,频繁暂停无法使用 马斯克 600 亿美元收购 Cursor codex 开始灰度 GPT 5.5 了 大家是如何使用 codex gpt-image-2 生图确实很顶啊,附带几张生成效果。 codex 的风评似乎在超过 Claude code? 智谱 GLM 宣布停止续订无周限额的老套餐 如何实现自我进化的 AI 的 Skills? 智谱(GLM)果然学习了阿里, 强制关闭了老用户套餐的自动续费 各位公司有除了智能客服外真正落地的 AI 应用吗? 热烈欢迎火山 Coding Plan 加入 GLM5.1 Kimi2.6 MiniMax2.7 阵容 请教大佬: claude API token 太烧钱了, minmax 还要兑换码,有没有合适的中转方案 开发一个面向普通用户(非程序员)的 Agent 软件,支持 skills、定时任务、对话功能,主要客户群体使用 Windows。感觉像是一个带前端的 Hermes,但是 Hermes 在 Windows 下运行不太友好,不适合非开发人员。 grok XAI 开始限制免费用户访问次数了吗? openspec 怎么配合 superpowers 使用? 阿里云的 coding plan 莫名奇妙被冻结了 程序员如何学习 ui 审美 开源了一个 AI Agent 认证工具 sig —— 让 AI Agent 安全访问外部系统 Vibe Coding 时代,该如何快速搭建一个 CRUD 平台? 感觉大多数的 coding plan 都是被龙虾薅死的。 有没有一起拼中转站的呀,找到一个中转站用了段时间感觉比较靠谱 搭个 AI 中转玩玩 Zeabur + Neon 50 块以内跑通 Coinepay:一张不能用的卡,扣了我 5 个月月费 Gemini in Chrome 支持日本了,为什么我的不生效? 跳板机/内网穿透方案,如何降低远程访问校内服务器延时? 现在有没有什么好的 AI 图片生成 3D 模型的方案? 关于科研 ai 作图 为什么现在 AI SDK 默认不支持异步? 建议 V2EX 加入一个 Ai App 或者 Vibe Coding 模块,把一堆 Ai 生成的产品都丢进去。 如果没用 coding plan 套餐了,再继续自费上班是不是就太傻了 AI 太烧钱了,有什么好的大模型组合方案? 阿里云百炼这波开始割韭菜了,下架 coding plan,改头换面 token plan 最新,腾讯云和阿里云 coding plan 购买页面均已下架,换成了 token plan 阿里云 CodingPlan 彻底没了,新上了 TokenPlan 大家看到 antigravity 那个配额监视器的广告了没? 真心发问,想学后端需要学啥? AI-Powered Log Analysis Tool - Pangu RCA 想自己写一个 code agent 玩玩,有什么开源项目可以参考吗? 腾讯云 Coding Plan 下架了 现在还有哪一个国产 Coding Plan 能买到吗? 106 行业短信签名申请新规范出台, 5 月 1 日起生效 最近上线了一个开发了半年的 shopify SAAS AI 就像那渣男渣女,平时哄着你温柔小意,关键时刻就坑你一波大的 大家在开发智能体时,都是怎么写系统提示词的? 现在大模型国内外直连越来越难买或拼车了,想试试中转站,大家有没什么推荐呀 一个人写了大半年 Android App,聊聊过程中的一些取舍,第二篇 智谱 coding plan 的使用 token 限制是多少? cli-proxy-api + 中转站领的鸡蛋 = 大模型免费用是否可行? gpt coding plan 一天试用(GPT 5.3codex 和 gpt 5.4) 大家用 AI 是订阅制多还是 API 按量付费多? 我用 AI 写了一个游戏,我发现我不想看代码,也看不懂代码了 AI 代码后面怎么维护,心智负担太大了 中年人爱上 AI 编程,就像爱上钓鱼 每月 AI 支出都超过生活费了 1000 行 rust 实现一个类似于 pytorch 的轻量级自动微分库
[分享创造] mqttkit:给 MQTT 写应用,像写 Elysia / Hono 那样 - V2EX
loveyoubaby5120 · 2026-06-24 · via 程序员

mqttkit:在 Aedes / EMQX 之上加一层应用框架——有序中间件、类型化 topic 路由、MQTT 5 RPC 、自动生成 AsyncAPI 文档。

起因:MQTT 的应用层一直是一片散沙

只要在 Node 里写过认真一点的 MQTT 后端,下面这段代码你大概率写过:

client.on('message', (topic, payload) => {
  if (topic.startsWith('devices/') && topic.endsWith('/events')) {
    const uid = topic.split('/')[1]
    // 临时手写鉴权
    // 临时手写 JSON.parse + 校验
    // 临时手写错误处理
    // 临时手写埋点
    // ...
  } else if (topic.startsWith('server/')) {
    // ...
  }
})

这就是 HTTP 世界十年前那种 http.createServer((req, res) => { if (req.url === '/users') ... }) 的写法——只不过换成了 MQTT 。HTTP 那边我们靠 Express 、Koa 、Fastify ,最近还有 Hono 、Elysia 把这个模式彻底解决了。MQTT 这边一直没有。

mqttkit 想补齐的就是这一层。

设计决策:不重新实现 MQTT 协议

Node 生态本来就有很好的 broker:

  • Aedes — 嵌入式 broker ,CONNECT / SUBSCRIBE / PUBLISH / QoS / retain / session / persistence / MQTT-over-WebSocket 全套都给你。
  • EMQX 、Mosquitto 、NanoMQ — 真要扛百万连接时用这些。

这些东西没必要重写。真正缺的是应用层

  • 怎么声明式地说「这个 topic 必须经过 XX 鉴权」?
  • 怎么用我已经在 HTTP 路由里用着的同一份 schema 校验 MQTT 的 payload ?
  • 怎么用 MQTT 5 做请求/响应,而不用手工管理 correlationData ?
  • 怎么白嫖一份 AsyncAPI 文档?
  • 怎么接 Prometheus / OpenTelemetry ,而不用去 hack broker ?

mqttkit 就是这一层。通过 @mqttkit/aedes 适配到 Aedes ,broker 是可插拔的——你也可以自己写适配器接 EMQX 、NanoMQ 。

代码长这样

import { aedes } from '@mqttkit/aedes'
import { MqttApp, router } from '@mqttkit/core'
import { z } from 'zod'

const app = new MqttApp<{ principal?: { uid: string } }>()
  .use(
    aedes({
      tcp: { port: 1883 },
      ws: { port: 8888, path: '/mqtt' },
      authenticate({ clientId, username }) {
        if (!username) return false
        return { uid: username || clientId }
      },
    }),
  )
  .use(
    router<{ principal?: { uid: string } }>()
      .topic('devices/:uid/events', {
        publish: ({ params, principal }) => params.uid === principal?.uid,
        schema: { body: z.object({ temperature: z.number() }) },
        timeout: 1_000,
        concurrency: 100,
        async onMessage(ctx) {
          // ctx.params.uid       → string
          // ctx.body.temperature → number (已校验、有类型)
          await ctx.publish(`server/${ctx.params.uid}/ack`, 'ok')
        },
      }),
  )

await app.listen()

写过 Elysia / Hono 的肌肉记忆可以直接迁移:use()、有序中间件、泛型驱动的类型推断、plugin 组合。

这些特性是真正省时间的部分

1. Topic 参数 + Standard Schema 校验

router().topic('devices/:uid/events', {
  schema: { body: z.object({ temperature: z.number() }) },
  async onMessage(ctx) {
    ctx.params.uid          // string ,从 topic 模式抽出来
    ctx.body.temperature    // number ,校验过、有类型
  },
})

任何 Standard Schema 实现都能用:zod 、valibot 、arktype 。不需要学 mqttkit 专属的 schema 方言。

2. 发布/订阅策略写成数据,而不是散落各处的回调

.topic('devices/:uid/events', {
  publish:   ({ params, principal }) => params.uid === principal?.uid,
  subscribe: ({ params, principal }) => params.uid === principal?.uid,
})

像路由定义一样易读,在正确的阶段被调用。再也不用满项目搜 aedes.authorizePublish

3. MQTT 5 RPC 带重试

const reply = await app.request('devices/alpha/cmd', 'reboot', {
  timeout: 500,
  retries: 2,
  retryDelay: 20,
})

correlationData 、responseTopic 、超时、重试,全部处理好。设备端用 ctx.reply(...) 收尾。

4. 路由级护栏

.topic('expensive/op', {
  timeout: 1_000,          // 超时直接 fail-fast
  concurrency: 100,        // 路由级过载保护
  onError: ({ error }) => metrics.routeFailures.inc(),
  async onMessage(ctx) { /* ... */ },
})

超时和并发上限内置,触发后会以命名 phase 走 onErrortimeout / overload / validation / policy / handler / middleware / publish

5. AsyncAPI 3.0 文档零成本生成

import { asyncapi } from '@mqttkit/asyncapi'

app.use(asyncapi({
  info: { title: 'My IoT API', version: '1.0.0' },
  http: { port: 9000 },     // 9000 端口直接看文档
}))

topic 路由本来就是声明式的——mqttkit 遍历一遍就能吐出 AsyncAPI 3.0 。配 @mqttkit/zod@mqttkit/typebox,payload 的 JSON Schema 也会一起带上。

6. 结构化指标接 Prometheus / OTel

app.onMetric((evt) => {
  // evt.kind: 'dispatch' | 'publish'
  // evt.route, evt.topic, evt.durationMs, evt.outcome
  prometheus.observe(evt)
})

不用 monkey-patch broker ,不用包装 handler 。框架本身就知道每次 dispatch 的开始和结束。

7. 共享订阅、生命周期事件、服务端主动 publish

router().topic('$share/workers/jobs/+/run', { /* 多实例扇出 */ })

app.on('client.connect', ({ clientId }) => audit.log('connect', clientId))
app.publish('server/broadcast', JSON.stringify({ shutdown: true }))

8. 内存版 TestBroker 跑单测

import { createTestApp } from '@mqttkit/core/testing'

const { app, broker } = createTestApp()
// 不开 TCP 、不开 socket ,dispatch 走的是同一条 pipeline

毫秒级跑完真实的中间件 / router / RPC 链路。

什么时候适合 mqttkit ,什么时候不适合

适合:

  • 在做 IoT 后端、设备遥测管线、实时游戏服、或者任何 TypeScript 的 MQTT 应用。
  • 想要鉴权 / 校验 / 指标 / 文档,但不想重复写五遍。
  • 喜欢 Elysia / Hono / Fastify 的心智模型。
  • 用 Bun (一等公民)或 Node 20+。

不适合:

  • 你需要的是一个能扛十万连接的 broker——那应该直接用 EMQX 或 NanoMQ ,mqttkit 是应用层,不是 broker 层。
  • 你写的是五行的桥接脚本——mqtt.js 就够了。

安装

bun add @mqttkit/core @mqttkit/aedes aedes
# 或
npm install @mqttkit/core @mqttkit/aedes aedes

包的分工:

  • @mqttkit/core — app 、router 、middleware 、RPC 、testing broker
  • @mqttkit/aedes — Aedes 适配器( TCP + WebSocket )
  • @mqttkit/asyncapi — AsyncAPI 3.0 生成器
  • @mqttkit/typebox@mqttkit/zod — schema helper

链接

写过 MQTT 后端、踩过同样的坑的朋友,欢迎来仓库提 issue 、PR 或者直接反馈你觉得还缺什么。觉得有用顺手给个 star——这是最便宜的支持方式。


mqttkit 是 MIT 协议,面向 Bun + TypeScript 构建。