热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

emqtt源码学习(1)---初识emq

emq简介emq为mqtt的erlang实现,看了官方文档总觉得不太给力,所以决定开始emq代码探索之旅,能力有限,如有错误请大家指正。今天是第一站,emqtt源码学习(1)—初识emq.

emq简介

emq为mqtt的erlang实现,看了官方文档总觉得不太给力,所以决定开始emq代码探索之旅,能力有限,如有错误请大家指正。今天是第一站,emqtt源码学习(1)—初识emq.

emq的启动

emqttd_app.erl :

start(_Type, _Args) ->
%% emq启动时会打印提示信息
print_banner(),
%% ekka是一个类zookeeper的东东,emq集群相关功能基于该应用
ekka:start(),
%% 启动emq监控进程,该进程下会挂载许多emq核心功能进程
{ok, Sup} = emqttd_sup:start_link(),
%% 在emq监控进程下,启动核心功能进程
start_servers(Sup),
%% cli:commnad line interface,该语句实现命令行功能,如用户通过 emqttd start 启动程序,事实上该命令将会转换为对应的erlang调用。该模块实现通过命令行对emq application中的参数进行设置查询,提供一种在程序运行过程中实时修改相关参数的接口,比如修改mqtt.client.max_publish_rate。
emqttd_cli:load(),
%% 加载acl认证模块
register_acl_mod(),
%% 该语句做两个事情,第一,绑定ekka模块的回调函数,包括prepar以及reboot的回调函数,可以认为该语句实现了ekka的一些配置。第二,如需要启动相应的插件,如校验插件,这里的插件指的是erlang 的application。第三,也是最重要的是启动了服务监听端口,包括tcp(esocked),加密tcp,web socket,加密websocket,这些监听模块都是第三方开源框架
start_autocluster(),
%% 注册名字
register(emqttd, self()),
%%打印版本信息
print_vsn(),
{ok, Sup}.

我第一次看这部分代码的时候对ekka产生了浓厚的兴趣,因为之前了解过zookeeper,初步认定这个ekka也是类似的吧,大概看了ekka的代码,基本证实了我的认定。

ekka和emq什么关系

先上个图:
这里写图片描述

如上图所示,emq基于ekka,ekka又基于mnesia,不同层作用也不一样,以mnesia为例,该应用其实就是erlang的分布式数据库,ekka就是通过mneisa进行集群管理,比如调用mnesia:system_info(running_db_nodes) 可以获取当前健康的mnesia节点,调用mnesia:system_info(db_nodes)可以获取mnesia包含的所有节点db_nodes > running_db_nodes时就表明有节点故障了。

下一站我们会游览emq其他核心功能模块(挂在在emqttd监控树下的进程)


推荐阅读
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 浅析对象 VO、DTO、DO、PO 概念
    作者|CatQi链接|cnblogs.comqixuejiap4390086.html前言由于此订阅号换了个皮肤,导致用户接受文章不及时。读者可以打开订阅号「Web项 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
  • 知识图谱表示概念:知识图谱是由一些相互连接的实体和他们的属性构成的。换句话说,知识图谱是由一条条知识组成,每条知识表示为一个SPO三元组(Subject-Predicate-Obj ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • ASP.NETCoreMVC的ModelBinding会将HTTPRequest数据,以映射的方式对应到参数中。基本上跟ASP.NETMVC差不多,但能Binding的来源更多了一 ... [详细]
author-avatar
时间熔金-岁月铅华_758
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有