声明:
这篇笔记是我进行技术选型时候的一些记录,最终我们的推送系统并没有采用基于Mosquitto的方案,这些内容仅供参考,需要更权威消息,还请移步官网。
使用方法
mosquitto_pub
mosquitto_passwd
代码结构
数据结构
struct mosquitto_db
struct mosquitto
-
mqtt3_config
: 配置文件的映射
文件结构
- security_default.c
mosquitto_security_init_default
mosquitto_security_cleanup_default
- net.c
mqtt3_socket_accept
- logging_mosquitto.c
_mosquitto_log_printf
- read_handle.c
-
mqtt3_packet_handle
: 读取包
-
- read_handle_client.c
mqtt3_handle_connack
- read_handle_server.c
mqtt3_handle_connect
mqtt3_handle_disconnect
mqtt3_handle_subscribe
mqtt3_handle_unsubscribe
- loop.c : 主循环
-
loop_handle_reads_writes
: 循环读取/写消息 -
loop_handle_errors
: 循环处理错误消息 -
do_disconnect
: 断开连接 -
mosquitto_main_loop
: 启用主循环
-
- lib/net.c
_mosquitto_packet_write
_mosquitto_net_write
_mosquitto_net_read
- lib/memory_mosq.c
_mosquitto_calloc
_mosquitto_free
- conf.c
_conf_attempt_resolve
_config_init_reload
mqtt3_config_init
mqtt3_config_cleanup
mqtt3_config_parse_args
- sys_tree.c
_sys_update_clients
_sys_update_memory
calc_load
mqtt3_db_sys_update
- subs.c : subscription
_subs_process
_sub_topic_tokenise
_sub_add
_sub_remove
_sub_search
mqtt3_sub_add
mqtt3_sub_remove
mqtt3_db_messages_queue
_subs_clean_session
mqtt3_subs_clean_session
mqtt3_sub_tree_print
-
_retain_process
预留的信息 mqtt3_retain_queue
标识符
username_flag:
connect_flags
Demos to write
- login with ssl
- use passwd to login
Connect 流程
start=>start: Start
mqtt3_packet_handle=>operation: mqtt3_packet_handle
mqtt3_handle_connect=>operation: read_handle_server#mqtt3_handle_connect
start->mqtt3_packet_handle->mqtt3_handle_connect
ACL
ACL流程
start=>start: Start
mqtt3_handle_publish=>operation: mqtt3_handle_publish
mosquitto_acl_check=>operation: mosquitto_acl_check
start->mqtt3_handle_publish->mosquitto_acl_check
ACL topic 与pattern区别
Clients
- 异步与同步
Questions
- database 放在什么地方?
- pid_file /var/run/mosquitto.pid 作用?
- 数据库的格式是什么?
- 二进制的
- 为何不用mysql等数据库访问
- 数据库中存放了哪些信息?
- 所有的配置选项:./mosquitto.conf
- what is briges?
- 如何接受离线消息
- set cleansession = False
- set qos to 2
- 离线的消息是存储在哪里的?
- 如何让某个账号给权限获取离线消息
- ssl 是如何正确运行的?
- 从接受消息到发送消息的过程是怎样的?
- 启动服务器的过程是怎样的?
- contexts作用?
- WITH_SYS_TREE 干嘛的?
- lib目录下的是否有用
- 有用
- 如何保证推送成功
- qos0? \
- 数据库与sql数据库有什么关系?
- 如何读取$SYS信息
参考
mosquitto源码分析 : http://wenku.baidu.com/link?url=iICdhK4CbSxFfHO5-MkobVoJ8BXdZNuMHulUzfCg-oMFUpfKWvL07APDQVLur0iPG9DdYrDRiBKrZ8wD9klG6N9xdRp1Qt7TQgBN4GToahy
Mosquitto : http://eclipse.org/mosquitto/
如果对我的文章感兴趣,也可以关注 我的github.