自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 资源 (2)
  • 收藏
  • 关注

原创 EMQX消息桥接RocketMQ(3)

-module(emqx_bridge_rocket).-include("../include/emqx_bridge_rocket.hrl").-include("../include/emqx.hrl").-export([load/1, unload/0]).-export([register_metrics/0]).-export([rocket_callback/2]).-export([on_client_connected/3, on_client_disconn.

2021-01-22 16:33:38 649

原创 EMQX消息桥接RocketMQ(2)

-module(emqx_bridge_rocket_sup).-behaviour(supervisor).-export([start_link/0]).-export([init/1]).start_link() -> supervisor:start_link({local, emqx_bridge_rocket_sup}, emqx_bridge_rocket_sup, []).init([]) -> {ok, {{one_for_one, 10, 100}.

2021-01-22 16:31:57 441

原创 EMQX消息桥接RocketMQ(1)

EMQX消息桥接RocketMQ 主要依赖库:rocketmq github地址https://github.com/tlchun/erlang-rocketmq.git-module(emqx_bridge_rocket_app).-behaviour(application).-emqx_plugin(bridge).-include("../include/emqx_bridge_rocket.hrl").-export([start/2, stop/1, prep_stop/..

2021-01-22 16:30:11 883

原创 EMQX消息存储MongoDB源码分析(4)

-module(emqx_backend_mongo).-include("../include/emqx_backend_mongo.hrl").-include("../include/emqx.hrl").-export([pool_name/1]).-export([register_metrics/0, load/0, unload/0]).-export([on_client_connected/3, on_subscribe_lookup/3, on_client.

2021-01-21 16:14:41 235

原创 EMQX消息存储MongoDB源码分析(3)

-module(emqx_backend_mongo_cli).-behaviour(ecpool_worker).-include("../include/emqx.hrl").-include("../include/mongo_protocol.hrl").-export([client_connected/2, subscribe_lookup/2, client_disconnected/2, message_fetch/3, lookup_retain/2, a.

2021-01-21 16:11:40 298 3

原创 EMQX消息存储MongoDB源码分析(2)

-module(emqx_backend_mongo_sup).-include("../include/emqx_backend_mongo.hrl").-behaviour(supervisor).-export([start_link/1]).-export([init/1]).start_link(Pools) -> supervisor:start_link({local, emqx_backend_mongo_sup}, emqx_backend_mongo_su.

2021-01-21 16:08:51 138

原创 EMQX消息存储MongoDB源码分析(1)

EMQX消息存储MongoDB 牵涉的外部库文件列表1、mongodb:https://github.com/comtihon/mongodb-erlang.git2、ecpool:ecpoolis different with worker-pool libraries in that it is designed to pool connection/clients to server or databasehttps://github.com/emqx/ecpool.git-mod...

2021-01-21 16:06:58 303

原创 EMQX消息存储Redis源码分析(5)

单机模式牵涉emqx_backend_redis_sub模块,该模块主要实现订阅redis数据。-module(emqx_backend_redis_sub).-behaviour(gen_server).-export([start_link/1]).-export([init/1,handle_call/3,handle_cast/2, handle_info/2, terminate/2, code_change/3]).-record(state, {sub}).start.

2021-01-21 15:50:39 173

原创 EMQX消息存储Redis源码分析(4)

emqx_backend_redis_cli 模块定义了访问redis的接口服务-module(emqx_backend_redis_cli).-include_lib("../include/emqx.hrl").-export([client_connected/2, subscribe_lookup/2, client_disconnected/2, message_fetch_for_queue/2, message_fetch_for_pubsub/2, me.

2021-01-21 15:25:20 127

原创 EMQX消息存储Redis源码分析(3)

emqx_backend_redis 模块是主要的工作模块,内部定义了redis统计,模块载入和卸载接口。1、emqx_metrics 模块2、emqx 模块的钩子函数3、emqx_topic模块-module(emqx_backend_redis).-include("../include/emqx_backend_redis.hrl").-include_lib("../include/emqx.hrl").%% API-export([pool_name/1,com..

2021-01-21 14:48:58 412

原创 EMQX消息存储Redis源码分析(2)

emqx_backend_redis_sup模块作为应用的root 监听者,主要从配置文件读取数据,然后根据数据启动单机还是集群-module(emqx_backend_redis_sup).-include("../include/emqx_backend_redis.hrl").-behaviour(supervisor).-export([start_link/1]).-export([init/1]).%% 启动应用监听者start_link(Pools) -> .

2021-01-21 14:22:24 152

原创 EMQX消息存储Redis源码分析(1)

EMQX 数据存储Redis主要牵涉到几个外部的库文件:1、 eredis:Non-blocking Redis client with focus on performance and robustnesshttps://github.com/wooga/eredis.git2、eredis_cluster:eredis_cluster is a wrapper for eredis to support cluster mode of redishttps://github.com/ad...

2021-01-21 14:13:35 226

原创 emqx 消息数据存储MySQL 插件源码分析(3)

%% 查询保留消息lookup_retain(Pool, Msg0) -> case mysql_execute(Pool,lookup_retain_query,[proplists:get_value(topic, Msg0)]) of {ok, Cols, [Row | _]} -> M = record_to_msg(lists:zip(Cols, Row)), [M#message{id = emqx_guid:f.

2020-12-02 23:29:45 212

原创 emqx 消息数据存储MySQL 插件源码分析(2)

1、emqx_backend_mysql_cli 模块源码分析-module(emqx_backend_mysql_cli).-include("emqx/include/emqx.hrl").%% 导出接口函数-export([client_connected/2, subscribe_lookup/2, client_disconnected/2, message_fetch/3, lookup_retain/2,

2020-11-29 19:25:34 229

原创 emqx 消息数据存储MySQL 插件源码分析(1)

1、emqx_backend_mysql_app模块 源码分析-module(emqx_backend_mysql_app).-include("mysql/include/emqx_backend_mysql.hrl").-behaviour(application).-emqx_plugin(backend).-export([start/2, stop/1]).start(_Type, _Args) -> %% 获取配置文件mysql的配置信息 Pools =.

2020-11-29 19:07:28 675

原创 emqx私有tcp协议服务器开发---emqx_tcp_protocol模块(3)

deliver({message, #message{payload = Payload}},PState) -> send(#tcp_packet_datatrans{data = Payload,length = byte_size(Payload)}, PState); deliver({connack, Code, Msg}, PState) -> send(#tcp_packet_con.

2020-11-29 15:41:05 225

原创 emqx私有tcp协议服务器开发---emqx_tcp_protocol模块(2)

clientinfo(#pstate{client_id = ClientId, username = Username, peername = {Peerhost, _},peercert = Peercert}) -> with_cert(#{zone => undefined, protocol => tcp, peerhost => Peerhost, cl.

2020-11-29 15:22:01 200

原创 emqx私有tcp协议服务器开发---emqx_tcp_protocol模块(1)

-module(emqx_tcp_protocol).-export([logger_header/0]).-include("emqx_tcp/include/emqx_tcp.hrl").-include("emqx/include/emqx.hrl").-include("/emqx/include/logger.hrl").-import(proplists, [get_value/2]).-import(emqx_misc, [maybe_apply/2]).-export.

2020-11-29 15:21:22 361

原创 emqx私有tcp协议服务器开发---emqx_tcp_frame模块

-module(emqx_tcp_frame).-include("/emqx_tcp/include/emqx_tcp.hrl").-export([initial_parse_state/1, parse/2, serialize/2]).-export([format/1]).%% 初始化解析状态initial_parse_state(Options) when is_map(Options) ->{none, merge_opts(Options)}.%% 合并解析配置mer.

2020-11-29 14:59:06 258

原创 emqx私有tcp协议服务器开发---emqx_tcp_connection模块(4)

1、处理客户端进来的数据包,然后调用emqx_tcp_frame解析数据2、客户端socket限速方法实现3、客户端socket的active_n属性设置接口实现4、客户端socket的相关的消息统计接口实现%% 处理socket进来的空数据包process_incoming(<<>>, Packets, State) -> {keep_state, State, next_events(Packets)};process_incoming(D.

2020-11-29 14:24:02 688

原创 emqx私有tcp协议服务器开发---emqx_tcp_connection模块(3)

%% 回调处理handle({call, From}, info, State) -> reply(From, info(State), State);handle({call, From}, stats, State) -> reply(From, stats(State), State); handle({call, From}, kick, State) -> ok = gen_statem:reply(From, ok), shutdown(kicke..

2020-11-29 14:11:53 363 2

原创 emqx私有tcp协议服务器开发---emqx_tcp_connection模块(2)

接着上一篇,继续分析下面的代码%% 速率限制未定义返回rate_limit_info(undefined) -> #{};%% 调用esockd 库函里面的方法获取限速相关信息rate_limit_info(Limit) -> esockd_rate_limit:info(Limit).%% 通过进程id 获取进程的统计信息stats(CPid) when is_pid(CPid) -> call(CPid, stats);stats(#state{transport.

2020-11-29 13:47:10 270 1

原创 emqx私有tcp协议服务器开发---emqx_tcp_connection模块(1)

2> {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks(emqx_tcp_connection,[abstract_code]).io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).

2020-11-29 13:21:59 916

原创 emqx私有tcp协议服务器开发---emqx_tcp_sup模块

-module(emqx_tcp_sup).%% 监听者行为模式-behaviour(supervisor).%% 启动模块方法-export([start_link/0]).%% 回调初始化方法-export([init/1]).%% 监听者启动函数start_link() -> %% 调用模块emqx_tcp_sup的方法 supervisor:start_link({local, emqx_tcp_sup},emqx_tcp_sup,[]).%% 回.

2020-11-28 14:42:11 421

原创 emqx私有tcp协议服务器开发---emqx-tcp.hrl

-define(APP, emqx_tcp).%% 65535 Bytes 最大报文定义-define(MAX_PACKET_SIZE, 16#ffff).-define(TCP_PROTO_V1, 1).-record(tcp_packet_conn, {client_id, keepalive, username, password, version}).-record(tcp_packet_connack, {code, msg}).-record(tcp_packet_da.

2020-11-28 14:30:02 414

原创 emqx tcp私有协议开发---emqx_tcp_app

-module(emqx_tcp_app).-behaviour(application).## 插件协议-emqx_plugin(protocol).## 导出启动和停止方法-export([start/2, stop/1]).## 导出socket监听和停止方法-export([start_listener/1,start_listener/3,stop_listener/1,stop_listener/3]).## 引入mqtt头文件-include("emqx_mqtt.h.

2020-11-28 14:15:21 754

原创 EMQX源码分析---esockd_acceptor_sup源码分析

该模块主要是启动一个监督者模块esockd_acceptor_sup,该模块主要是对esockd_acceptor模块的工作进程进程监督。该模块对外提供了三个函数,分别如下:1、start_link(ConnSup, TuneFun, UpgradeFuns, StatsFun, LimitFun):该函数被esockd_listener_sup模块的start_link函数内部调用,所以es...

2019-03-02 15:25:09 498

原创 EMQX源码分析---esockd_connection_sup源码分析

该模块主要是监听连接的socket连接,所以这个模块主要包含一些针对连接的管理接口,该模块主要的API如下:1、start_link(Opts, MFA) 该函数主要是启动esockd_connection_sup监听器,函数内部调用了OTP的gen_server:start_link(?MODULE, [Opts, MFA], [])函数,然后回调该模块的init([Opts, MFA]...

2019-03-02 14:49:27 1461

原创 EMQX源码分析---esockd_listener_sup模块源码分析

在前面的文章提到执行ok = esockd:start()后,应用分别启动三个模块esockd_sup,esockd_rate_limiter,esockd_server,这三个模块启动后,我们需要注入我们自己实现的socket服务,这里以echo_server为例,当在shell里执行esockd:open(echo, 5000, Options, MFArgs).的时候会调用esoc...

2019-02-28 15:38:59 468

原创 EMQX源码分析---esockd_server模块源码分析

-module(esockd_server).-behaviour(gen_server).-export([start_link/0]).%% stats API 导出模块接口给外部调用-export([stats_fun/2, init_stats/2, get_stats/1, inc_stats/3, dec_stats/3, del_stats/1]).%% gen_...

2019-02-28 10:31:39 317

原创 EMQX源码分析--- esockd_rate_limiter 模块源码分析

esockd_rate_limiter模块是一个工作者进程,主要是实现基于ets esockd_rate_limiter表来限制socket的速率,其代码如下:-module(esockd_rate_limiter).-behaviour(gen_server).-export([start_link/0]).-export([create/2, create/3, consum...

2019-02-27 20:17:34 464

原创 EMQX源码分析---esockd_sup 模块源码分析

esockd_sup模块的行为模式是 supervisor,该模式是一个监督者,该模块被 esockd_app模块内部的 start(_StartType, _StartArgs)方法内部调用,然后在esockd_sup内部会调用下面的方法:-spec(start_link() -&gt; {ok, pid()} | ignore | {error, term()}).start_link...

2019-02-27 19:48:23 638

原创 EMQX源码分析---esockd源码分析

一、基本功能介绍 1、esockd是erlang异步非阻塞TCP/SSL Socket服务器框架 2、支持Acceptor池与异步Accept 3、支持UDP/DTLS 服务器 4、支持最大连接数管理 5、支持动态对指定的ip进行否定和允许 6、客户端限速支持 7、ip6支持二、架构图三、从esockd.erl 文件开始该模块包含了核心A...

2019-02-27 19:32:05 1805

原创 erlang est 并发

1、ETS是Erlang内置的内存数据库,具有并发读写的性能。2、ETS驻留在内存,DETS驻留在硬盘。3、ETS存储是临时的,DETS中的数据存储是持久的。4、ETS非常高效,在ETS中,无论你存储多少数据,查询速度都与之无关(特定情况成对数关系),前提是拥有足够大的内存。5、DETS相对效率要低很多,但比ETS更加节省内存。6、ETS表和DETS表可以被多个进程共享,可以...

2019-02-23 13:50:27 353

原创 erlang est表

ETS是Erlang Term Storage 的缩写,它是一个基于内存的KV( Key Value) Table,支持大数据量存储以及高效查询。ETS表的基本:1、ETS 表可以用来高效存储海量的erlang数据,ETS提供大型的键-值查询表.2、ETS是相当高效的:可以用它存储海量的数据(只要有足够的内存),最常用的表操作是插入和查找.3、ETS表的数据保存在内存里,他们是易失的。当...

2019-02-13 15:27:41 466

转载 黑客书单

《信息安全标准和法律法规(第二版)》(注:武汉大学出版社)《HTTP权威指南》《HTML5权威指南》《JavaScript权威指南(第6版)》《TCP/IP详解卷1:协议》《SQL编程基础(原书第3版)》《PHP和MySQL Web开发(第四版)》《PHP安全基础》《PHP应用程序安全编程》《高级PHP应用程序漏洞审核技术》《精通正则表达式 (第3版) 》...

2019-01-29 09:48:08 415

转载 自定义View系列文章

 https://www.jianshu.com/p/146e5cec4863 自定义View基础 - 最易懂的自定义View原理系列(1)https://www.jianshu.com/p/1dab927b2f36 自定义View Measure过程 - 最易懂的自定义View原理系列(2)https://www.jianshu.com/p/158736a2549d 自定义View ...

2019-01-04 14:17:59 175 1

转载 Android 史上最强工具详细

https://www.jianshu.com/p/ec5a1a30694b Android 屏幕适配:最全面的解决方案https://www.jianshu.com/p/4e8e4fd13cf7 Android开发:ListView、AdapterView、RecyclerView全面解析https://www.jianshu.com/p/b61a49e0279f 手把手带你全面了解An...

2019-01-04 14:12:52 164

原创 Golang Redis Cache

1.Redis性能极高 – Redis能读的速度是110000次/s,写的速度是81000次/s 。丰富的数据类型 – Redis支持二进制案例的 Strings, Lists, Hashes, Sets 及 Ordered Sets 数据类型操作。原子 – Redis的所有操作都是原子性的,同时Redis还支持对几个操作全并后的原子性执行。丰富的特性 – Redis还支持 publish/sub...

2018-06-28 14:14:40 2149

转载 人工智能学习路线

http://blog.csdn.net/T7SFOKzorD1JAYMSFk4/article/details/79073686

2018-03-09 09:41:00 650

Paas容器实战

Paas容器实战,K8,Spring Security3 pdf文档 Paas容器实战,K8,Spring Security3 pdf文档

2017-11-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除