Ejabberd啟動梳理及相關檔案介紹
啟動流程
ejabberd工程啟動application:start(ejabberd).
ejabberd.erl
start() ->
%%%ejabberd_cover:start(),
application:start(ejabberd).
stop() ->
application:stop(ejabberd).
%%%ejabberd_cover:stop().
查詢ejabberd.app檔案,並按該檔案指示,啟動ejabberd應用
ejabberd.app.src
檢視ejabberd/src/ejabberd.app.src檔案
{application, ejabberd,
[{description, "ejabberd"},
{vsn, "16.12.beta1-48"},
{modules, []},
{registered, []},
{applications, [kernel, stdlib]},
{env, []},
{mod, {ejabberd_app, []}}]}.
mod 定義了應用程式的回撥模組和啟動引數,由此可知應用程式啟動時會由主導程序來呼叫這個模組的start/2方法
ejabberd_app.erl
start(normal, _Args) ->
%%% 啟動lager
ejabberd_logger:start(),
%%%將當前erlang虛擬機器程序pid寫入EJABBERD_PID_PATH定義檔案中
write_pid_file(),
%%%啟動必要應用(例如sasl,ssl,fast_yaml,fast_tls,fast_xml,cache_tab等)
start_apps(),
%%%啟動elixir應用
start_elixir_application(),
%%%檢查ejabberd應用是否正常啟動
ejabberd:check_app(ejabberd),
%%% start() ->ok.
randoms:start(),
%%%初始化並啟動本地mnesia
db_init(),
%%%啟動ejabberd程序,loop空迴圈
start(),
%%%從環境變數EJABBERD_MSGS_PATH定義的位置找*.msg並載入到ets:translations表(國際化)
translate:start(),
%%%啟動gen_server訪問控制
ejabberd_access_permissions:start_link(),
%%%建立兩張表ets-ejabberd_ctl_cmds,ets-ejabberd_ctl_host_cmds
ejabberd_ctl:init(),
%%%建立表ets-ejabberd_commands並調整表結構
ejabberd_commands:init(),
%%%註冊常用ejabberd_command到表ejabberd_commands
ejabberd_admin:start(),
%%%建立表ets-ejabberd_modules
gen_mod:start(),
%%%增加ejabberd modules到code path中
ext_mod:start(),
%%%如果elixir的配置被使用,則安裝elixir,否則什麼都不做
setup_if_elixir_conf_used(),
%%%讀取配置並生成公鑰(ShareKey)
ejabberd_config:start(),
%%%根據配置設定日誌級別(level)以及net_ticktime 60s(預設)
%%%The frequency of both tick messages and detection of failures
%%%is controlled by the net_ticktime configuration setting
set_settings_from_config(),
%%%建立訪問控制表並根據配置填寫
acl:start(),
%%%建立sharpe表並根據配置填寫
shaper:start(),
%%%連線叢集其他節點
connect_nodes(),
%%%啟動一個supervisor,並啟動和監控定義子程序
Sup = ejabberd_sup:start_link(),
%%%啟動資料庫相關模組
ejabberd_rdbms:start(),
%%%啟動riak
ejabberd_riak_sup:start(),
%%%啟動redis
ejabberd_redis:start(),
%%%啟動ms模組
ejabberd_sm:start(),
%%%啟動SASL安全認證模組
cyrsasl:start(),
% Profiling
%ejabberd_debug:eprof_start(),
%ejabberd_debug:fprof_start(),
%%%如果執行在windows系統,則新增域名伺服器(DNS)地址到erlang系統中
maybe_add_nameservers(),
%%%啟動所有鑑權模組
ejabberd_auth:start(),
ejabberd_oauth:start(),
%%%動該host的所以modules
gen_mod:start_modules(),
%%%啟動配置檔案中的監聽器模組
ejabberd_listener:start_listeners(),
register_elixir_config_hooks(),
?INFO_MSG("ejabberd ~s is started in the node ~p", [?VERSION, node()]),
Sup;
start(_, _) ->
{error, badarg}.
附:
1.ejabberd_command命令格式
#ejabberd_commands{name = status, tags = [server],
desc = "Get status of the ejabberd server",
module = ?MODULE, function = status,
result_desc = "Result tuple",
result_example = {ok, <<"The node [email protected] is started with status: started"
"ejabberd X.X is running in that node">>},
args = [], result = {res, restuple}}
定義一個status命令,接受引數[],返回{res,restuple}
2.監控程序
Sup = ejabberd_sup:start_link()
該語句負責啟動子程序監控程序,詳細檢視start_link啟動後呼叫的init函式
init([]) ->
...
{ok, {{one_for_one, 10, 1},
[Hooks,
NodeGroups,
SystemMonitor,
Router,
Router_multicast,
S2S,
Local,
Captcha,
S2SInSupervisor,
S2SOutSupervisor,
ServiceSupervisor,
IQSupervisor,
FrontendSocketSupervisor,
Listener]}}.
{{one_for_one, 10, 1}表示重啟策略,one_for_one(只重啟終止的子程序自身),如果1s內重啟次數超過10則終止所有子程序和自身(詳細啟動引數可以檢視ejabberd_sup.erl)
檔案介紹
ejabberd.app
在$(INSTALLDIR)/ejabberd/ebin 目錄下,用於配置ejabberd 應用程式的部分資訊,主要提供應用程式可以載入的所有模組名
ejabberd.yml
在/etc/ejabberd/ 目錄下,用於配置ejabberd各種資訊,包括:
◦日誌(LOGGING)
◦節點(NODE PARAMENTERS)
◦主機名(SERVED HOSTNAMES)
◦監聽埠(LISTENING PORTS)
◦S2S全域性配置(S2S GLOBAL OPTIONS)
◦認證方式(AUTHENTICATION)
◦資料庫(DATABASE SETUP)
◦流量控制(TRAFFIC SHAPERS)
◦訪問控制列表(ACCESS CONTROL LISTS)
◦訪問控制規則(ACCESS RULES)
◦預設語言(DEFAULT LANGUAGE)
◦驗證碼(CAPTCHA)
◦模組(MODULES)
ejabberd.erl、 ejabberd_app.erl
在原始碼目錄的src目錄下,程式啟動相關。
gen_mod.erl、 ext_mod.erl
在原始碼目錄的src目錄下,模組載入相關。
mod_*.erl
在原始碼目錄的src目錄下,各種模組的原始碼。
ejabberd_config.erl
在原始碼目錄的src目錄下,管理ejabberd 配置檔案
ejabberd_c2s.erl、ejabberd_sm.erl、ejabberd_socket.erl、ejabberd_listen.erl、ejabberd_router.erl
在原始碼目錄的src目錄下,使用者註冊、登入、訊息收發、訊息路由相關
(後面會針對以上5個檔案模組進行詳細解析)
知識補充(關於.app檔案)
{application, Application,
[{description, Description},
{id, Id},
{vsn, Vsn},
{modules, Modules},
{maxP, MaxP},
{maxT, MaxT},
{registered, Names},
{included_applications, Apps},
{applications, Apps},
{env, Env},
{mod, Start},
{start_phases, Phases},
{runtime_dependencies, RTDeps}]}.
其中必須配置項description,vsn,modules,registered,applications
相關推薦
Ejabberd啟動梳理及相關檔案介紹
啟動流程 ejabberd工程啟動application:start(ejabberd). ejabberd.erl start() -> %%%ejabberd_cover:start(), application:start(
【一】linux安裝redis(單機版)、3種啟動方式、及配置檔案介紹。
環境ubuntu16.04 解壓 tar -zxvf redis-3.2.6.tar.gz 修改資料夾名稱 mv redis-3.2.6 redis 編譯 cd /app/redis make 編譯好後會看到redis.conf和src檔案 安裝 cd
linux使用者及組相關檔案介紹
使用者和組檔案介紹 1.使用者賬號檔案:passwd passwd命令用於設定使用者的認證資訊,包括使用者密碼、密碼過期時間等。系統管理者則能用它管理系統使用者的密碼。只有管理者可以指定使用者名稱稱,一般使用者只能變更自己的密碼。 選項 -d:刪除密碼,僅有系統管理者才能使用; -
原 Python資料爬蟲學習筆記(15)Scrapy常見命令及專案檔案介紹
一、Scrapy常見命令提示符CMD命令: (1)scrapy -h 檢視指令幫助。 (2)scrapy fetch http://baidu.com 直接爬取特定網頁。 (3)scrapy runspider scrapytest.py 執行特定爬蟲(前提要使用cd
java註解三: .yml 的讀取技巧及獲取檔案介紹
轉:https://zhidao.baidu.com/question/437547082212460524.html在spring boot中,簡單幾步,讀取配置檔案(application.yml)中各種不同型別的屬性值:1、引入依賴:<!-- 支援 @Config
4星|《哥倫比亞商學院商業策略課》:重要戰略思想及相關案例介紹
哥倫比亞商學院商業策略課 作者是商學院教授,也有管理顧問的從業經驗。書中作者嘗試梳理批判目前的主要戰略思想,並提出自己的理論。 作者認為已有戰略思想的弊端如下:1:波特和BCG都提出了頗具宿命論意味的觀點,認為個體企業和行業的內在結構性特點基本上決定了企業業績,這是不對的;2:雖然《追求卓越》《基業長
ELK(三):Elasticsearch如何安裝及相關外掛介紹?
安裝步驟 系統準備: 作業系統:CentOS6.4 64bit 軟體版本:JDK8.60 , Elasticsearch1.7.1 具體軟體名稱:jdk-8u60-linux-x64.tar.gz , elasticsearch-1.7.1.tar.
使用者管理相關檔案介紹
【1】使用者管理相關檔案介紹 (1)使用者管理 使用者的屬性 1)使用者名稱 2)口令 3)使用者ID(UID) 4)使用者主目錄(HOME) 5)使用者shell (2)/etc/passwd檔案
AOSP6.0.1 launcher3入門篇-解析DeviceProject.java及相關檔案
上一篇文章(AOSP6.0.1 launcher3入門篇—解析launcher.java檔案)描述了launcher3的載入過程,本篇文章記錄hotseat停靠方向和位置、隱藏頁指示器、Folder大小等。 首先介紹建構函式: 找到public DevicePr
vuejs及相關工具介紹
輕量級前端mvm的框架 圖片.png 對es6語法的簡單描述 圖片.png 融合了react和angular的優點,元件化和靈活應用和指令,在國際上是一款極有潛力的前端框架。 1.雙向繫結 兩段相加得到後面頁面的渲染,{{message}}是常見頁面模板的渲染方式。 v-model 的意思是將 新建ne
幾種常見的模式識別演算法整理 及 相關資料介紹和下載
這學期選了門模式識別的課。發現最常見的一種情況就是,書上寫的老師ppt上寫的都看不懂,然後繞了一大圈去自己查資料理解,回頭看看發現,Ah-ha,原來本質的原理那麼簡單,自己一開始只不過被那些看似formidable的細節嚇到了。所以在這裡把自己所學的一些點記錄下來,供備忘,也供參考。 1. K-Near
opencv筆記(一)——名稱空間及相關函式介紹
名稱空間 opencv中的C++類和函式都是定義在名稱空間cv之內的,所以有如下opencv函式的兩種呼叫方法: ex1: Mat srcImg = cv::imread(“1.jpg”); ex2: using namespace cv; Mat
SpringBoot啟動原理及相關流程
一、springboot啟動原理及相關流程概覽 springboot是基於spring的新型的輕量級框架,最厲害的地方當屬自動配
IntelliJ IDEA 之 HelloWorld 專案建立及相關配置檔案介紹
在博文「IntelliJ IDEA 的使用介面介紹」中,我們通過建立一個 Static Web 專案大致瞭解了 IntelliJ IDEA 的使用介面。接下來,趁著這個熱乎勁,我們來建立第一個 Java 專案HelloWorld,進入如下介面: 如上圖所示
JavaWeb網上圖書商城完整項目--day03-1.圖書模塊功能介紹及相關類創建
class default package ren 書籍 logs main java getc 1 前兩天我們學習了user用戶模塊和圖書的分類模塊,接下來我們學習圖書模塊 圖書模塊的功能主要是下面的功能: 2 接下來我們創建對應的包 我們來看看對應的數據庫表t_bo
展示C代碼覆蓋率的gcovr工具簡單介紹及相關命令使用演示樣例
文件夾 mes repo 例如 oid else if dir total down (本人正在參加2015博客之星評選,誠邀你來投票,謝謝:username=zhouzxi">http://vote.blog.csdn.net/blogstar2015
Nginx工作原理及相關介紹
handle 利用 ice fff 高並發 解析器 異常 creat 為什麽 Nginx工作原理及相關介紹一、Nginx工作原理與模塊介紹1、Nginx基本工作原理NGINX以高性能的負載均衡器,緩存,和web服務器聞名。Nginx由內核和模塊組成,其中,內核的設計非常微小
VS2010-MFC(對話框:屬性頁對話框及相關類的介紹)
name sbt simple 兩個 點擊 pct dialog hang pos 轉自:http://www.jizhuomi.com/software/164.html 一 屬性頁對話框的分類 屬性頁對話框想必大家並不陌生,XP系統
以太坊:Dapp及相關開發工具介紹
去中心化應用 去中心化應用是可以使使用者和供應商之間直接互動的服務(例如,連線某些市場上的買方和賣方,檔案儲存裡的持有者和儲存者)。以太坊去中心化應用典型地通過HTML/Javascript網路應用與使用者互動,使用Javascript API與區塊鏈通訊。去中心化應用典型地在區塊
keepalived介紹及配置檔案詳解
keepalived介紹 Keepalived軟體起初是專為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟體外,還可以作為其他服務(例如:Nginx、Hapr