MQTT再学习MQTT客户端源码分析网络蚂蚁

MQTT源码分析,搜索了一下发现网络上讲的很少,多是逍遥子的那几篇。

参看:逍遥子_mosquitto源码分析系列

参看:MQTTlibmosquitto源码分析

参看:Mosquitto学习笔记

一、目录结构首先我们还是来看一下mosquitto-1.4.14的源码目录结构

我们主要就是来看看,这两个客户端的实现源码。

二、SUB客户端源码

首先我们先看sub_client.c我们从main函数开始。

查看结构体:结构体structmosq_config主要为MQTT的配置信息structmosq_config{char*id;char*id_prefix;intprotocol_version;intkeepalive;char*host;intport;intqos;boolretain;intpub_mode;/*pub*/char*file_input;/*pub*/char*message;/*pub*/longmsglen;/*pub*/char*topic;/*pub*/char*bind_address;#ifdefWITH_SRVbooluse_srv;#endifbooldebug;boolquiet;unsignedintmax_inflight;char*username;char*password;char*will_topic;char*will_payload;longwill_payloadlen;intwill_qos;boolwill_retain;#ifdefWITH_TLSchar*cafile;char*capath;char*certfile;char*keyfile;char*ciphers;boolinsecure;char*tls_version;#ifdefWITH_TLS_PSKchar*psk;char*psk_identity;#endif#endifboolclean_session;/*sub*/char**topics;/*sub*/inttopic_count;/*sub*/boolno_retain;/*sub*/char**filter_outs;/*sub*/intfilter_out_count;/*sub*/boolverbose;/*sub*/booleol;/*sub*/intmsg_count;/*sub*/#ifdefWITH_SOCKSchar*socks5_host;intsocks5_port;char*socks5_username;char*socks5_password;#endif};

client_config_load客户端配置负载第二个参数,可选择选择是PUB还是SUB

然后看到init_config函数

可以看到一些初始化配置voidinit_config(structmosq_config*cfg){memset(cfg,0,sizeof(*cfg));cfg->port=1883;cfg->max_inflight=20;cfg->keepalive=60;cfg->clean_session=true;cfg->eol=true;cfg->protocol_version=MQTT_PROTOCOL_V31;}

mosquitto_lib_init初始化(重点)

client_id_generate生成客户端ID其实就是我们讲MQTT服务器的时候,订阅主题然后在服务器上多出的那一行信息。里面的mosqsub|2431-ubuntu就是客户端ID。这个函数就是干这个。1502159601:Newclientconnectedfrom127.0.0.1asmosqsub|2431-ubuntu(c1,k60)

mosquitto_new新建一个mosq。(重点)

看了一下这个函数里面就是一些初始化的东西然后可以看到它也是在lib目录下定义的。所以说需要链接动态库libmosquitto.so.1。其他不用改。

client_ipts_set各种设置。懒得看...

一些调试信息以及订阅回调设置mosquitto_subscribe_callback_set(重要)

连接回调设置,和信息回调设置(重点)

这两个函数都是在lib目录下定义的。里面都是有互斥锁的。

client_connect客户端连接

intclient_connect(structmosquitto*mosq,structmosq_config*cfg){charerr[1024];intrc;#ifdefWITH_SRVif(cfg->use_srv){rc=mosquitto_connect_srv(mosq,cfg->host,cfg->keepalive,cfg->bind_address);}else{rc=mosquitto_connect_bind(mosq,cfg->host,cfg->port,cfg->keepalive,cfg->bind_address);}#elserc=mosquitto_connect_bind(mosq,cfg->host,cfg->port,cfg->keepalive,cfg->bind_address);#endifif(rc>0){if(!cfg->quiet){if(rc==MOSQ_ERR_ERRNO){#ifndefWIN32strerror_r(errno,err,1024);#elseFormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,errno,0,(LPTSTR)&err,1024,NULL);#endiffprintf(stderr,"Error:%s\n",err);}else{fprintf(stderr,"Unabletoconnect(%s).\n",mosquitto_strerror(rc));}}mosquitto_lib_cleanup();returnrc;}returnMOSQ_ERR_SUCCESS;}可以看到里面又有几个重要函数mosquitto_connect_srvmosquitto_connect_bind-->_mosquitto_connect_init

然后不断回环,里面的参数自己看。

最后是mosq的销毁和库的关闭。(重点)

到此结束!!三、PUB客户端源码接下来来看pub_client.c有一些相同部分我就不再重复了。

一些配置信息的比较

client_id_generate生成客户端ID

调试信息这里面就没有了订阅回调设置mosquitto_subscribe_callback_set

然后这里看这里,是有区别的。(重点)

connect、disconnect、publish.这些回调设置

回环开始、结束

最重要的来了,dowhile循环里的发布内容(重点)

这里的qos就是消息发布服务质量级别。

然后还有retain用于区分新老订阅者RETAIN标志位只用于PUBLISH消息,当服务器收到某个主题的PUBLISH消息时,如果RETAIN标志位为1,则表示服务在将该消息发送给所有的已订阅该主题的订阅者后(发送前服务器将RETAIN标志置为0),还需保持这条消息,当有新增的订阅者时,再将这条消息发给新增的订阅者;如果RETAIN标志位为0,则不保持消息,也不用发给新增的订阅者。目的:1.将RETAIN标志位置为1,可使新的订阅者收到之前保持的或上一个确定有效的消息。2.区分新订阅者(RETAIN标志为1)和老订阅者(RETAIN标志为0)

THE END
1.蚂蚁借呗下载手机版2024最新免费安装“花呗”用户在消费时,可以预支蚂蚁花呗的额度,享受“先消费,后付款”的购物体验。 工资理财,自动还贷 厂商联系方式:客户服务热线:95188 官方微博:@支付宝 http://weibo.com/zfbwxzf 官方网站:https://www.alipay.com/ 蚂蚁借呗,一般又称支付宝,Alipay。 支付宝是蚂蚁集团旗下业务,诞生于2004年,已经成长...https://m.liqucn.com/app-rn-10070-0
2.蚂蚁云蚂蚁云(www.ant-cloud.net) 计算服务器提供商,专注云服务器,VPS,香港免备案空间服务器,SSL证书,域名注册,企业建站等云计算解决方案,弹性灵活,助力企业轻松上云。云服务器租用、网站服务器租用、云数据库租用、CDN加速企业建站首选蚂蚁云。https://www.ant-cloud.net/trademark/abroadShow
3.云蚂蚁客户端如何解除绑定机器方法一: 通过老板手机端解绑 进入手机管理界面, 选择终端, 选择要解绑的机器 进入机器界面 , 选择备注, 然后再解除绑定 方法二: 通过云客户端解除绑定 输入云蚂蚁客户端的管理员密码 首先我们点击右下角状态栏的云蚂蚁程序 按动鼠标右键,点击高级设置,http://www.u7pk.cn/help/DocDetail.aspx?id=1332
4.云蚂蚁客户端如何解除绑定机器方法一: 通过老板手机端解绑 进入手机管理界面, 选择终端, 选择要解绑的机器 进入机器界面 , 选择备注, 然后再解除绑定 方法二: 通过云客户端解除绑定 输入云蚂蚁客户端的管理员密码 首先我们点击右下角状态栏的云蚂蚁程序 按动鼠标右键,点击高级设置,http://www.u7pk.com/help/DocDetail.aspx?id=1332
5.与北京蚂蚁云金融信息服务公司签订蚂蚁区块链合作伙伴框架协议...与北京蚂蚁云金融信息服务公司签订蚂蚁区块链合作伙伴框架协议 2018年9月17日公告,公司与北京蚂蚁云金融信息服务有限公司于2018年9月14日签订《蚂蚁区块链合作伙伴框架协议》,一致同意基于双方优势资源,通过资源共享建立业务合作及市场推广机制,共同拓展区块链市场,促进双方品牌的共同推广。双方将以共同建设领先的大数据生态...http://guba.sina.cn/view_64_217148.html
6.大蚂蚁即时通讯客户端下载大蚂蚁即时通讯官方版下载v5.8大蚂蚁即时通讯是由杭州艾朴软件推出的一款企业级即时通讯平台,旨在为企业提供高效、安全、稳定的即时通讯服务。该平台支持多种通讯方式,包括文字消息、语音通话、视频会议、文件共享等,满足企业不同场景下的通讯需求。同时,大蚂蚁即时通讯还提供了丰富的功能特性,如即时通讯、消息队列、群聊、多人视频会议等,帮助企业实...https://www.32r.com/soft/26511.html
1.阿里云产品服务协议3.2.1. 您可通过阿里云网站或客户端自行选购您所需的服务,阿里云将不时提供正在公测期的产品服务,您可通过届时我们提供的方式申请使用,并遵守本协议的约定服务使用限制。您对阿里云服务的使用应遵守法律法规,同时您在使用阿里云产品服务的过程中还应遵守阿里云发布的《服务使用规则》以及《安全管控规则》 。 http://terms.aliyun.com/legal-agreement/terms/suit_bu1_ali_cloud/suit_bu1_ali_cloud201802281451_77479.html?spm=5176.b73997031.0.0.41827508XEZYSs
2.云蚁物联官网免费下载云蚁物联,支持多型号智能摄像机使用。 【远程监控,高清画质】通过APP查看您的摄像机,随时随地,了解家中情况; 【双向语音通话】身处再远,也能随时语音互动,家人、宠物仿佛就在身边; 【分享给家人】您可将设备分享给其他家人,不同账号设定不同权限,分享更随心,使用更安全; 【移动监测报警】任何异动及时通知,6秒短视...http://ku.u.360.cn/detail.php?sid=559448&sid=3989839
3.阿里云app最新版,重塑数字生活的强大工具平台保险柜阿里云app最新版是一款重塑数字生活的强大工具。它集成了阿里云的技术优势,为用户提供丰富的数字化服务,涵盖云计算、大数据、人工智能等领域。这款app致力于提升用户体验,简化操作流程,让用户更轻松地管理和应用数字生活。无论是个人用户还是企业用户,都能通过阿里云app最新版享受高效的云服务,实现数字化转型。 http://www.jydsafe.com/post/12560.html
4.云迁移离线采集工具采集工具文档中心云资源离线调研工具供客户采集源端平台的资源使用,目前支持对阿里云、华为云和 AWS 国际站的源端资源扫描。 如果云资源地域在境外,将扫描工具下载到境外节点进行扫描,可以减少因为网络问题造成的云厂商 API 调用失败。 准备工作 扫描工具工作需要指定云资源所在的云厂商名称, 资源所在地域 Region 和访问云资源的密钥对(...https://cloud.tencent.com/document/product/659/112539
5.分享2019年蚂蚁金服面经(已拿Offer)!附答案!!客户端–发送带有 SYN 标志的数据包–一次握手–服务端 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端 为什么要三次握手 三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认...https://www.ucloud.cn/yun/7294.html
6.蚂蚁云医院,诱导客户,骗人蚂蚁云医院,诱导客户,骗人 来自安卓APP客户端 https://www.51kanong.com/xyk-9103177-1.htm
7.蚂蚁办公零信任的技术建设路线与特点特点:微隔离是一种在数据中心和云部署中创建安全区域的方法,该方法使企业组织可以分离工作负载并分别保护它们 用于保护:业务到业务的访问安全 3.2 蚂蚁办公零信任安全架构 基于SDP + IAM + MSG零信任核心技术,结合蚂蚁企业实际情况,构建以身份为边界的办公零信任安全管控平台。如下图8 ,终端上安装SDP客户端后,能够实现...https://www.secrss.com/articles/43978
8.微信运营方案怎么写9篇(全文)微信商城是用户直接可以在通过关注云蚂蚁云销平台微信在微信上直接进行浏览商品、购买等行为的商城。完善微信商城的搭建,包括:商城商品展示(商品信息)、会员登录、商品购买流程、会员中心、退货申请、商品评价、物流查询、会员积分、优惠券领取、pc端商城数据对接等。(注:此功能可以暂缓开发,先完善一些基础功能)...https://www.99xueshu.com/w/filer4w7wg0i.html
9.在Windows搭建私人蚂蚁云笔记服务器windows云笔记服务器在Windows搭建私人蚂蚁云笔记服务器 前言 1.下载相关文件 2.安装MongoDB 3.导入leanote初始数据 4.安装leanote客户端 5.设置开机启动 致谢 前言 实在厌烦了用ppt整理论文笔记的方式,于是突发奇想试图寻找一个笔记软件,最终找到leanote,并试图将其服务器搭建在自己的电脑上,经过几个小时的努力,终于完成了所有工作。https://blog.csdn.net/weixin_44676142/article/details/107156400
10....攻坚产业协作蚂蚁集团数字科技业务亮相云栖大会“蚂蚁数字科技业务秉持‘以数助实’的价值理念,在服务企业及机构数字化、产业协作数字化、可信价值互联三个不同的数字化生命周期里,联合合作伙伴推出80多个行业解决方案,在金融、新能源、版权科技、跨境贸易等领域服务近万家企业。”11月3日,蚂蚁集团在云栖大会公布科技业务全景图,并发布云原生、隐私计算、安全科技、...http://my-h5news.app.xinhuanet.com/news/article.html?articleId=2bc1e3f2bffc4d9033d5307612b6f84f
11.十年磨一剑:蚂蚁集团可观测性平台AntMonitor揭秘2017年后,整个蚂蚁集团可观测性能力逐步走向了全息化、数据化和智能化。这一代整个团队除了继承前几年的平台建设优点之外,还着力解决了几个方面的问题,包括: 完成从客户端到服务端,从业务应用到基础设施的一站式全场景监控 基于监控的海量数据,实时数据探查和分析 ...https://maimai.cn/article/detail?fid=1800250066&efid=jf8V2GlnjZflcznBrC9g3A
12.蚂蚁金服手机版客户端下载芝麻信用,是蚂蚁金服旗下独立的第三方信用评估及管理机构,通过云计算、机器学习等技术客观呈现个人的信用状况,已经在消费金融、融资租赁、信用卡、P2P、酒店、租房、出行、婚恋、分类信息、学生服务、公共事业服务等近百个场景为用户、商户提供信用服务,众多用户享受到了信用的便利。人与人,人与商业之间的关系正因为信...https://m.qqtn.com/q/109858