MQTT 的遗愿消息

作者:Joe,原文链接,原文日期:2016-07-04
译者:粉红星云;校对:shanks;定稿:CMB

这里是在 Linux 上使用 Swift 来编写MQTT客户端系列的一篇文章。

在这篇文章里,我们将着眼在 MQTT遗愿消息。一般是连接着代理程序的客户端预定义好 LWT(Last Will and Testament)的。如果客户端异常地断开连接,代理程序(the broker)将会广播 LWT 消息到所有订阅者的客户端中。

比如说,你正在搭建一个聊天应用,每个客户端与代理程序连接着并且订阅了/chat/hottub,被发布到/chat/hottub的消息被所有的订阅者接收。加入一个“聊天室”是一简单有效的方法(比如:MQTT 主题)。

在正常情况下,一个客户端主动退出的时候,我们一般会期待看见这样的消息:“Joe 离开了/chat/hottub”。这个实现起来很简单,在用户用户离开的时候,发布一个/exit的消息然后关闭客户端。但如果一个客户端非正常地中断连接(如网络异常、客户端闪退等等),谁来给代理程序发遗愿消息呢。

下面展示如何给 MQTT 客户端设置遗言:

class Client:MQTT, MQTTDelegate {
  init(clientId:String) {
    super.init(clientId:clientId)
    super.willMessage =  MQTTWill(topic:"/chat/hottub",
                                  message:"{\"client\":\"\(clientId)\",\"message\":\"Abnormal Disconnect\"}")
    super.delegate = self
  }
  ...
}

willMessageMQTT 的一个 MQTTWill 类型的成员属性。 MQTTWill 由标题和消息构成。在我们这个例子中标题可以是我们的聊天频道/chat/hottub,消息则是由我们客户端 ID 和一个简单的异常连接中断的字符串组成的 JSON 字符串。

获取代码

我们搭建程序用的 Swift 3.0 是来自苹果最新的代码仓库的,并且有持续更新我们程序的代码。需要先按照我们的apt-get仓库安装 Swift 3.0

我们 MQTT 聊天室的例子在GitHub上。

# git clone https://github.com/iachievedit/MQTTHotTub
# cd MQTTHotTub
# swift build

出于测试的目的,需要运行 MQTTHotTub 两回,所以需要打开两个终端。

用这个命令运行客户端 .build/debug/MQTTHotTub

Prisencolinensinainciusol

我们的客户端 MQTTHotTub 模拟了一个语无伦次聊天对话。发布的每条消息都是以 JSON 格式的传递的。

{"client":"octxktfo", "message":"Gyxswhz nsoxfnj gz."}
{"client":"ajyhyjic", "message":"Cmr w bzwubzv mwfhtklz."}

当一个客户端接收到一条不是自己发布的消息,会有过滤消息的过程:

if cid != clientId {
  SLogInfo("Received \"\(msg)\" from \(cid)")
}

如果我们监听发送给一个特定主题的消息,并且我们也向那个主题发送消息。就像回声一样,客户端将也会接受到自己发布的消息。这就是用 cid != clientId 来过滤的目的了。

可以观察到每个客户端控制台打印记录,看看他们从别的客户端接收到的消息:

Received "Wlfu zrqyj tady obxnjl lupihobi nph oapplt nyidmja." from octxktfo
Received "Cmr w bzwubzv mwfhtklz." from ajyhyjic

现在, CTRL-C 其中一个客户端,注意到剩下的其他客户端接收到的消息:

Received "Abnormal Disconnect" from octxktfo
连接异常中断

以上就是 MQTT 的遗愿消息的实操啦。中断连接的客户端没有机会去广播自己要退出,所以代理程序代替它发布了客户端的死前遗言到对话/聊天室:

{"client":"\(clientId)","message":"Abnormal Disconnect"}

必须要有死前遗言吗

必须这个词太严肃了,这个问题的答案是 “不”,你的 MQTT 客户端不需要提供一个遗愿消息。如果你想要提供的话,这里有很多的其他案例可以指导你。

接下来的计划

我们继续地很努力地研究在 Linux 上使用 Swift 来实现MQTT。在这篇文章后,我们的将专注于实现 MQTT 的安全连接(MQTT SSL)上。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,333评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,812评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,016评论 0 246
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,293评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,650评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,788评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,003评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,741评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,462评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,681评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,168评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,528评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,169评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,119评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,846评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,719评论 2 274

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,103评论 18 139
  • 宁静_686a阅读 1,153评论 0 0
  • 生于忧患,死于安乐。说的一点也没有错,人就是这样,在安逸的环境中死去,在逆境中才能成长
    LuckyPi阅读 184评论 0 0
  • 他是爱着她的,从一开始,他就是一直爱着她的。只是这份爱,却最终葬于人心,相守未相厌,只因未相知。 他是普通的如同大...
    砂蔚阅读 215评论 3 7
  • 前情回顾 第五章:短暂的离别 实习就这样分了下来,纵有不甘心,也有不开心,但每个人都踏上了新的征程。 倩雪拿着两大...
    遇琳阅读 336评论 4 8