monitor_nodes(Flag) -> ok | Error
monitor_nodes(Flag, Options) -> ok | Error
Flag = boolean()
Options = OptionsList | OptionsMap
OptionsList = [ListOption]
ListOption =
connection_id | {node_type, NodeType} | nodedown_reason
OptionsMap =
#{connection_id => boolean(),
node_type => NodeType,
nodedown_reason => boolean()}
NodeType = visible | hidden | all
Error = error | {error, term()}
調用進程訂閱或取消訂閱節點狀態更改消息。當新節點連接時,nodeup
消息將傳遞到所有訂閱進程,而當節點斷開連接時,將傳遞 nodedown
消息。
如果 Flag
是 true
,則開始新的訂閱。如果 Flag
是 false
,則以相同 Options
開始的所有先前訂閱都將停止。如果兩個選項列表包含相同的選項集,則它們被視為相同。
nodeup
/nodedown
消息的傳送保證:
-
nodeup
消息在通過新建立的連接傳遞來自遠程節點的任何信號之前傳遞。 -
nodedown
消息在通過連接來自遠程節點的所有信號都已傳遞後傳遞。 -
nodeup
消息在erlang:nodes()
的結果中出現相應節點後傳遞。 -
nodedown
消息在erlang:nodes()
結果中相應節點消失後傳遞。 -
從 OTP 23.0 開始,由於到同一節點的新連接,將在
nodeup
消息之前傳送正在斷開的連接的nodedown
消息。在 OTP 23.0 之前,不能保證一定會出現這種情況。
節點狀態更改消息的格式取決於 Options
。如果Options
為空列表或調用net_kernel:monitor_nodes/1
,則格式如下:
{nodeup, Node} | {nodedown, Node}
Node = node()
什麽時候Options
是空映射或空列表,調用者隻會訂閱可見節點的狀態更改消息。也就是說,隻有出現在結果中的節點erlang:nodes/0
.
如果Options
等於空列表以外的任何值,則狀態更改消息的格式如下:
{nodeup, Node, Info} | {nodedown, Node, Info}
Node = node()
Info = #{Tag => Val} | [{Tag, Val}]
Info
是映射或二元組列表。其內容取決於Options
。如果Options
是一張Map,那麽Info
也將是一張Map。如果Options
是一個列表,那麽Info
也將是一個列表。
當Options
是映射時,當前允許以下關聯:
connection_id => boolean()
-
如果關聯的值等於
true
, Aconnection_id => ConnectionId
協會將被納入Info
Map哪裏ConnectionId
是建立或斷開連接的連接標識符。有關此連接標識符的更多信息,請參閱文檔erlang:節點/2. node_type => NodeType
-
NodeType
的有效值:visible
-
僅訂閱可見節點的節點狀態更改消息。關聯
node_type => visible
將包含在Info
映射中。 hidden
-
僅訂閱隱藏節點的節點狀態更改消息。關聯
node_type => hidden
將包含在Info
映射中。 all
-
訂閱可見節點和隱藏節點的節點狀態更改消息。關聯
node_type => visible | hidden
將包含在Info
映射中。
如果不
node_type => NodeType
協會被納入Options
map,調用者隻會訂閱可見節點的狀態變化消息,但是不node_type => visible
協會將被納入Info
Map。 nodedown_reason => boolean()
-
如果關聯的值等於
true
,則nodedown_reason => Reason
關聯將包含在nodedown
消息的Info
映射中。Reason
可以是任何術語,具體取決於所使用的分發模塊或進程,但對於標準 TCP 分發模塊,它是以下其中一項:connection_setup_failed
-
連接設置失敗(發送
nodeup
消息後)。 no_network
-
沒有可用的網絡。
net_kernel_terminated
-
net_kernel
進程終止。 shutdown
-
未指定的連接關閉。
connection_closed
-
連接已關閉。
disconnect
-
連接已斷開(強製從當前節點斷開)。
net_tick_timeout
-
淨刻度time-out。
send_net_tick_failed
-
無法通過連接發送網絡時鍾信號。
get_status_failed
-
從保持連接的
Port
檢索狀態信息失敗。
當Options
是列表時,當前ListOption
可以是以下之一:
connection_id
-
A
{connection_id, ConnectionId}
元組將被包含在Info
其中ConnectionId
是建立或斷開連接的連接標識符。有關此連接標識符的更多信息,請參閱文檔erlang:節點/2. {node_type, NodeType}
-
NodeType
的有效值:visible
-
僅訂閱可見節點的節點狀態更改消息。元組
{node_type, visible}
將包含在Info
列表中。 hidden
-
僅訂閱隱藏節點的節點狀態更改消息。元組
{node_type, hidden}
將包含在Info
列表中。 all
-
訂閱可見節點和隱藏節點的節點狀態更改消息。元組
{node_type, visible | hidden}
將包含在Info
列表中。
如果不
{node_type, NodeType}
已給出選項。調用者隻會訂閱可見節點的狀態變化消息,但是不{node_type, visible}
元組將被包含在Info
列表。 nodedown_reason
-
元組
{nodedown_reason, Reason}
將包含在nodedown
消息的Info
列表中。請參閱文檔
nodedown_reason => boolean()
上述關聯有關可能的信息Reason
值。
例子:
(a@localhost)1> net_kernel:monitor_nodes(true, #{connection_id=>true, node_type=>all, nodedown_reason=>true}).
ok
(a@localhost)2> flush().
Shell got {nodeup,b@localhost,
#{connection_id => 3067552,node_type => visible}}
Shell got {nodeup,c@localhost,
#{connection_id => 13892107,node_type => hidden}}
Shell got {nodedown,b@localhost,
#{connection_id => 3067552,node_type => visible,
nodedown_reason => connection_closed}}
Shell got {nodedown,c@localhost,
#{connection_id => 13892107,node_type => hidden,
nodedown_reason => net_tick_timeout}}
Shell got {nodeup,b@localhost,
#{connection_id => 3067553,node_type => visible}}
ok
(a@localhost)3>
相關用法
- erlang monitor_scope()用法及代碼示例
- erlang monitor(Type :: process, Item :: monitor_process_identifier())用法及代碼示例
- erlang monitor(Type :: process, Item :: monitor_process_identifier(), Opts :: [monitor_option()])用法及代碼示例
- erlang monitor(Socket)用法及代碼示例
- erlang module(AbsForms)用法及代碼示例
- erlang max用法及代碼示例
- erlang member用法及代碼示例
- erlang min用法及代碼示例
- erlang merge用法及代碼示例
- erlang make_dir用法及代碼示例
- erlang memory用法及代碼示例
- erlang match(Table, Pattern)用法及代碼示例
- erlang match_spec_run(List, CompiledMatchSpec)用法及代碼示例
- erlang make_tuple(Arity, InitialValue)用法及代碼示例
- erlang make_tuple(Arity, DefaultValue, InitList)用法及代碼示例
- erlang map_get(Key, Map)用法及代碼示例
- erlang map_size(Map)用法及代碼示例
- erlang max(Term1, Term2)用法及代碼示例
- erlang memory()用法及代碼示例
- erlang min(Term1, Term2)用法及代碼示例
- erlang map(Fun, Orddict1)用法及代碼示例
- erlang merge(Fun, Orddict1, Orddict2)用法及代碼示例
- erlang map(Fun, MapOrIter)用法及代碼示例
- erlang merge(Map1, Map2)用法及代碼示例
- erlang merge_with(Combiner, Map1, Map2)用法及代碼示例
注:本文由純淨天空篩選整理自erlang.org大神的英文原創作品 monitor_nodes(Flag) -> ok | Error。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。